题意

给定一个整形数组,将0都移动到最后,保持其他数组相对位置不变

题目来源:https://leetcode.com/problems/move-zeroes/

标记难度:Easy

提交次数:1/N

代码效率:100%

1
2
Input: [0,1,0,3,12]
Output: [1,3,12,0,0

分析

一个快指针,一个慢指针,快指针指向不为0的元素,快慢指针值交换,同时向后移动一位。这样可以保证下面两个条件:

  • 快慢指针之间的元素都是0
  • 慢指针之前的元素都不为0

    代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
int tmp =0;
for(int i = 0;i < nums.length;i++){
if(nums[i]!=0){
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
j++;
}
}
}
}

一些废话

一开始理解错误,以为把0都放到后面之后还是要对前面从大到小进行排序。。。结果想了半天

以后还是要仔细审题,不要怀疑自己,先用自己的想法暴力实现

写代码之前可以举个栗子来一步一步推敲,想好边界和规律再写代码