Move Zeroes
题目描述:
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
思路:
说实话。刚看到有点头大,后面尝试写,思路是遍历每一个元素,如果是0,就把后面的元素往前移动一个,然后把零移到后面。
注意:在循环的时候,不要急着对循环变量加1,先判断移动后,是不是0.如果是零,接着移动,不加1.还有每次移动,都把后面就加一个 零,设置一个变量count技术,后面循环n = n - count
代码:
public class Solution {
public void moveZeroes(int[] nums) {
int n = nums.length;
//用来后面减去移动次数的计数
int num = n;
int i = 0;
while(i < num){
if(nums[i] == 0){
int last = nums[i];
for(int a = i;a < n-1;a++){
nums[a] = nums[a+1];
}
nums[n-1] = last;
}
if(nums[i] != 0){
//如果不是零,才往后加1
i = i+1;
}else{
//减去移动次数,与因为后面都是零
num = num-1;
}
}
}
}