leecode每日刷题1

题目描述

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

1 <= nums.length <="104" -104 nums 已按 非递减顺序 排序 code></=>

进阶:

&#x8BF7;&#x4F60;&#x8BBE;&#x8BA1;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A; O(n) &#x7684;&#x7B97;&#x6CD5;&#x89E3;&#x51B3;&#x672C;&#x95EE;&#x9898;
&#x6765;&#x6E90;&#xFF1A;&#x529B;&#x6263;&#xFF08;LeetCode&#xFF09;
&#x94FE;&#x63A5;&#xFF1A;https://leetcode-cn.com/problems/squares-of-a-sorted-array
&#x8457;&#x4F5C;&#x6743;&#x5F52;&#x9886;&#x6263;&#x7F51;&#x7EDC;&#x6240;&#x6709;&#x3002;&#x5546;&#x4E1A;&#x8F6C;&#x8F7D;&#x8BF7;&#x8054;&#x7CFB;&#x5B98;&#x65B9;&#x6388;&#x6743;&#xFF0C;&#x975E;&#x5546;&#x4E1A;&#x8F6C;&#x8F7D;&#x8BF7;&#x6CE8;&#x660E;&#x51FA;&#x5904;&#x3002;

解题过程

  • 方法1
    ①先将数组内的数平方
    ②使用快排进行排序
    ③时间复杂度为O(nlogn)
    解题代码
//&#x503C;&#x7684;&#x4EA4;&#x6362;
void swap(int *a, int *b){
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

//&#x5148;&#x5199;&#x4E00;&#x4E2A;&#x5FEB;&#x901F;&#x6392;&#x5E8F;
void quickSort(int *nums, int numsSize ,int begin, int end){
    int i, j;
    if( begin < end){
        i = begin + 1;
        j = end;
        while(i < j){
            if(nums[i] > nums[begin]){
                swap(&nums[i], &nums[j]);
                j--;
            }else{
                i++;
            }
        }
        if(nums[i]>=nums[begin]){
            i--;
        }
        swap(&nums[begin],&nums[i]);
        quickSort(nums,numsSize,begin,i);
        quickSort(nums,numsSize,j,end);
    }
}

int* sortedSquares(int* nums, int numsSize, int* returnSize){
    for(int i = 0; i < numsSize; i++){
        nums[i]= nums[i]*nums[i];
    }
    quickSort(nums, numsSize, 0, numsSize-1);

    *returnSize = numsSize;
    return nums;
}
  • 方法2
    根据原数组就是一个倒序排列的数组,可知,在正数和负数分界处,左边负数的绝对值为从大到小排列,而右边的数为从小到大,故可设置一个新数组,通过比较两个边界的最大值,确定新数组的最大值,往下类推
&#x539F;&#x6570;&#x7EC4;:-4, -1, 0, 3, 10
&#x7EDD;&#x5BF9;&#x503C;&#x540E;&#x7684;&#x6570;&#x7EC4;:  4, 1, 0, 3, 10
&#x5E73;&#x65B9;&#x540E;&#x7684;&#x6570;&#x7EC4;: 16,  1,  0,  3,  100
&#x7B2C;&#x4E00;&#x6B21;:      left             right
  &#x56E0;&#x4E3A;16<100 100 故新数组newnums[4]="100" right往左移 平方后的数组: 16, 1, 0, 3, 第一次: left right 继续16和3比较,挑出最大值 ...... < code></100>

①定义两个数字指针left与right,left指向原数组的最左边下标,right指向最右边的下标
②比较数组在left和right下标对应的值的平方,大的值,存入新数组中,若left值的大,则left需往右移,同理,right需往左移
③循环②直至新数组赋值完毕
解题代码

int Sqrt(int num){
  return num*num;
}
//&#x4E0D;&#x4F7F;&#x7528;&#x6392;&#x5E8F;  &#x5229;&#x7528;&#x53CC;&#x6307;&#x9488;&#x5B9E;&#x73B0;
int* sortedSquares(int* nums, int numsSize, int* returnSize){
    int left = 0, right = numsSize - 1;
    int *returnNums = (int *)malloc(sizeof(int)*numsSize);
    //&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x8FD4;&#x56DE;&#x6570;&#x7EC4;&#xFF0C;&#x5E76;&#x8D4B;&#x4E88;&#x5730;&#x5740;
    int index = numsSize - 1;
    while(index>=0){
        if(Sqrt(nums[left]) > Sqrt(nums[right])){
            returnNums[index] = Sqrt(nums[left]);
            left++;
        }
        else{
            returnNums[index] = Sqrt(nums[right]);
            right--;
        }
        index--;
    }
    *returnSize = numsSize;
    return returnNums;
}

题目描述

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

&#x8F93;&#x5165;: nums = [1,2,3,4,5,6,7], k = 3
&#x8F93;&#x51FA;: [5,6,7,1,2,3,4]
&#x89E3;&#x91CA;:
&#x5411;&#x53F3;&#x8F6E;&#x8F6C; 1 &#x6B65;: [7,1,2,3,4,5,6]
&#x5411;&#x53F3;&#x8F6E;&#x8F6C; 2 &#x6B65;: [6,7,1,2,3,4,5]
&#x5411;&#x53F3;&#x8F6E;&#x8F6C; 3 &#x6B65;: [5,6,7,1,2,3,4]

示例 2:

&#x8F93;&#x5165;&#xFF1A;nums = [-1,-100,3,99], k = 2
&#x8F93;&#x51FA;&#xFF1A;[3,99,-1,-100]
&#x89E3;&#x91CA;:
&#x5411;&#x53F3;&#x8F6E;&#x8F6C; 1 &#x6B65;: [99,-1,-100,3]
&#x5411;&#x53F3;&#x8F6E;&#x8F6C; 2 &#x6B65;: [3,99,-1,-100]

提示:

1 <= 0 1 nums.length <="105" -231 - code></=>
&#x6765;&#x6E90;&#xFF1A;&#x529B;&#x6263;&#xFF08;LeetCode&#xFF09;
&#x94FE;&#x63A5;&#xFF1A;https://leetcode-cn.com/problems/rotate-array
&#x8457;&#x4F5C;&#x6743;&#x5F52;&#x9886;&#x6263;&#x7F51;&#x7EDC;&#x6240;&#x6709;&#x3002;&#x5546;&#x4E1A;&#x8F6C;&#x8F7D;&#x8BF7;&#x8054;&#x7CFB;&#x5B98;&#x65B9;&#x6388;&#x6743;&#xFF0C;&#x975E;&#x5546;&#x4E1A;&#x8F6C;&#x8F7D;&#x8BF7;&#x6CE8;&#x660E;&#x51FA;&#x5904;&#x3002;

实现代码

  • 方法一
    两种实现方式:
  void rotate(int* nums, int numsSize, int k){
  k=k%numsSize;
  int tmpNums[numsSize];
  for(int i = 0; i < numsSize; i++){
      tmpNums[i] = nums[(numsSize-k+i)%numsSize];
  }
  for(int i=0;i<numssize;i++){ nums[i]="tmpNums[i];" } < code></numssize;i++){>
  void rotate(int* nums, int numsSize, int k){
  k = k % numsSize;
  if(k == 0){
      return;
  }
  int *tmpNums = malloc(sizeof(int)*k);
  for(int i = 0; i < k; i++){
      tmpNums[i] = nums[numsSize-i-1];
  }
  for(int j = numsSize-1; j >= 0; j--){
      if(j >= k){
          nums[j] = nums[j -k];
      }
      else{
          nums[j] = tmpNums[k -j-1];
      }
  }
  }

Original: https://www.cnblogs.com/jane315/p/15941215.html
Author: jane_315
Title: leecode每日刷题1

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583740/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数论-一次同余式

    同余式: 设f(x)=an(xn)+an-1(x*n-1)+…+a1x+a0(n≥1,ai∈Z),f(x)∈Z[x],则f(x)≡0 (modm)是模m的同余式,若an…

    数据结构和算法 2023年6月7日
    0126
  • CF 793 div2 D 题解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    072
  • AcWing 1250. 格子游戏(并查集)

    题目描述 题目链接 题目思路 如果两个点连边之前在一个集合里,那么连边后就构成一个环 如果两个点连边之前不在一个集合里,那么连边后就不构成一个环 从前往后合并,直到第一次出现环为止…

    数据结构和算法 2023年6月16日
    068
  • Codeforces1573B

    问题描述 给你两个数组,a数组里面是1 – 2n中的奇数任意顺序排列组成,b数组里面是1 – 2n中的奇数任意顺序排列组成。 问你最少需要多少次操作能让a的…

    数据结构和算法 2023年6月7日
    096
  • Maven [ERROR] 不再支持源选项 5,请使用 7 或更高版本的解决办法

    不再支持源选项 5,请使用 7 或更高版本的解决办法 报错如下 具体原因 没有配置jdk的版本,默认的版本过低。 在 maven 里的 conf 的 setting.xml 中默认…

    数据结构和算法 2023年6月7日
    0195
  • 0019:快速幂-uf0_金币灰黄

    题目链接: https://www.luogu.com.cn/problem/P1226 给你三个整数 a,b,p ,求 a^b mod p 的值。 这道题就是快速幂的模板题。 那…

    数据结构和算法 2023年6月12日
    085
  • 排序算法-快速排序

    快速排序 快速排序法介绍: 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有…

    数据结构和算法 2023年6月12日
    099
  • 数据库系统概论小结(三)【面向考试】

    数据库系统概论小结(三)【面向考试】 第三章 关系数据库标准语言SQL 前面学习实操的时候已经做过总结 第四章 数据库安全性 4.1数据库安全性概述 4.1.1数据库不安全因素 非…

    数据结构和算法 2023年6月7日
    0104
  • 剑指 Offer II 001. 整数除法

    太恶心了这题,处理边界处理了半天,这里提到不能用 *, /, %,所以就考虑了使用减法来模拟除法。思路是首先需要做特判,比如 a被除数等于0,可以直接返回, b除数等于0,则不是有…

    数据结构和算法 2023年6月7日
    075
  • 关于『基本算法』:常见八大排序

    序言 基本算法向你发起进攻,请注意防守。🔫🔫🔫 排序,是非常重要的内容,一般来说,我们经常用到的其实是十大排序—— 分类 名称 时间复杂度 空间复杂度 稳定性 平 均 情 况 最 …

    数据结构和算法 2023年6月8日
    085
  • 模拟栈和模拟队列

    栈是一种数据结构,先进后出,只支持一端进行插入和弹出操作,可以用数组进行模拟实现,现在编程语言中都进行了封装,可以直接调用 插入:插入时就是栈顶指针指向的内存区域存放当前要插入的元…

    数据结构和算法 2023年6月8日
    094
  • JZ0047:二叉树剪支

    📃 题目描述 题目链接:二叉树剪支、相同题目 🔔 解题思路 第一种做法:dfs,思考方式是你站在一个点上怎么做,在一个点上,先看左子树是否要删除,再看看右子树,然后进行删除操作,最…

    数据结构和算法 2023年6月12日
    081
  • 剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找首先需要注意到题目下方的数据范围, n和 m可能是0,所以当 n等于0时,需要及时返回 false,因为此时矩阵都不存在了,所以也就不存在…

    数据结构和算法 2023年6月7日
    088
  • PAT (Basic Level) Practice (中文)–1009.说反话 Python3

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词…

    数据结构和算法 2023年6月7日
    069
  • 做题记录 牛客小白月赛46 D

    思路:dp,设dpu,i代表以u为根,距离为i+1的节点总数。 最后dpu,1要加上所有dpv,0-1,其中v是u的子节点(要-1是为了排除v->u的边) 则每个节点i的答案…

    数据结构和算法 2023年6月12日
    092
  • 数据结构学习——BST删除特定节点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月12日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球