【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】(3题)
- 数组的改变、移动
- 453. 最小操作次数使数组元素相等 Medium
- 665. 非递减数列 Medium
- 283. 移动零 Easy
大家好,这里是新开的LeetCode刷题系列,以后尽量一天更新一个小章节。此系列应超过400题。
数组篇03《数组的改变、移动》,共3道题,1简单题2中等题。
注意看重点部分,总结起来是这一类题的规律。
数组的改变、移动
453. 最小操作次数使数组元素相等 Medium
453. 最小操作次数使数组元素相等
public int minMoves(int[] nums) {int min = Arrays.stream(nums).min().getAsInt();int sum = 0;int n = nums.length;for(int i = 0; i < n; i++){sum += nums[i] - min;}return sum;}
重点
- 问题转化:n-1位加一转换成 1位-1
- Arrays的流操作
665. 非递减数列 Medium
665. 非递减数列
public boolean checkPossibility(int[] nums) {int n = nums.length;int time = 0;for(int i = 1; i < n; i++){int x = nums[i-1], y = nums[i];if(x > y){time++;if(i > 1 && y < nums[i - 2]){nums[i] = x;}if(time > 1){return false;} }}return true;}
重点
- 简化题目:用x,y来指代递减的两个数
- 改变原数组一次,以观察是否符合题设
- 分情况讨论:
- 如果y大于x左侧,则该错误略过
- 如果y小于x左侧,则此时y应修改为x,判断后面序列情况
283. 移动零 Easy
283. 移动零
public void moveZeroes(int[] nums) {int n = nums.length;int tail = 0;for(int num : nums){if(num != 0){nums[tail++] = num;}}for(int i = tail; i < n; i++){nums[i] = 0;}}
重点
- 指针思维,使用指针的思维方式,用tail指向该更新的位置
- 最后别忘记结果置0
这个系列希望能够帮助大家提高刷题效率,发现系列算法题目的常规思路,更快a题,速通Leetcode
b站【软件柠檬】以后会不定期分享计算机领域基础知识,求职干货,为大家助力实习和春秋招offer,
公众号【软件柠檬】也会不定期更新优质内容,分享优质干货资料,希望能够帮助到大家~
❤️这里是 软件柠檬, 让我们一起学习进步~❤️