算法:移动零283. Move Zeroes
Posted 架构师易筋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:移动零283. Move Zeroes相关的知识,希望对你有一定的参考价值。
283. Move Zeroes
Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Example 2:
Input: nums = [0]
Output: [0]
Constraints:
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
Follow up: Could you minimize the total number of operations done?
1. 记住0的index解法
public class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
for(int i = 0; i < nums.length; i++) {
if(nums[i] != 0) {
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
j++;
}
}
}
}
2. 滚雪球解法
这个想法是我们遍历数组并收集我们路上的所有零。
让我们以我们的例子为例:
第一步 - 我们遇到 0。
好吧,请记住现在我们的雪球的大小是 1。再进一步。
下一步 - 我们遇到 1。将雪球最左边的 0 与元素 1 交换。
下一步——我们再次遇到0!
我们的球变大了,现在它的大小 = 2。
下一步 - 3. 与最左边的零再次交换。
看起来我们的零一直在滚动
下一步 - 12. 再次交换:
我们到达了终点!恭喜!
class Solution {
public void moveZeroes(int[] nums) {
int snowBallSize = 0;
for (int i=0;i<nums.length;i++){
if (nums[i]==0){
snowBallSize++;
}
else if (snowBallSize > 0) {
int t = nums[i];
nums[i]=0;
nums[i-snowBallSize]=t;
}
}
}
}
参考
https://leetcode.com/problems/move-zeroes/discuss/172432/THE-EASIEST-but-UNUSUAL-snowball-JAVA-solution-BEATS-100-(O(n))-%2B-clear-explanation
以上是关于算法:移动零283. Move Zeroes的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 283. Move Zeroes 移动零
LeetCode 283. Move Zeroes (移动零)
LeetCode 283. 移动零 Move Zeroes (Easy)