每天进步一点点,每天都会不一样。肯吃苦的人吃苦半辈子,不肯吃苦的人,吃苦一辈子。
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路:
从后往前看,当遇到零,则将整后面的所有值依次向前移动,最后一位置零。
代码地址:https://github.com/maronghe/ODOP/blob/master/src/com/logan/leetcode/removezero/RemoveZeroTester.java
public class RemoveZeroTester {
public static void main(String[] args) {
int[] arr = {0,1,0,3,12};
for(int num : moveZeroes(arr)) {
System.out.println(num);
}
}
/**
* remove zero
*
* @param nums
* @return
*/
public static int[] moveZeroes(int[] nums) {
int index = nums.length -1;
int lastIndex = index;
while(index >=0){
if(nums[index] == 0){
int count = lastIndex - index;
for(int i = 0 ; i < count ; i++){
nums[index + i] = nums[index + i + 1];
}
nums[lastIndex] = 0;
lastIndex --;
}
index --;
}
return nums;
}
}