283.移动零

题目描述

原题
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
1
输入: [0,1,0,3,12]
2
输出: [1,3,12,0,0]
Copied!
说明:
    1.
    必须在原数组上操作,不能拷贝额外的数组。
    2.
    尽量减少操作次数。

题解

1
class Solution {
2
public void moveZeroes(int[] nums) {
3
int len = nums.length;
4
int count = 0; //记录0的个数
5
//倒序遍历数组 遇到0就移动位置
6
for(int i = len - 1;i > -1;i --){
7
if(nums[i]==0){
8
int j = i;
9
count++;
10
while(j < len - count){
11
nums[j] = nums[j+1];
12
j++;
13
}
14
nums[j] =0;
15
}
16
}
17
}
18
}
Copied!
1
//官方解法 双指针
2
class Solution {
3
public void moveZeroes(int[] nums) {
4
int n = nums.length, left = 0, right = 0;
5
while (right < n) {
6
if (nums[right] != 0) {
7
swap(nums, left, right);
8
left++;
9
}
10
right++;
11
}
12
}
13
14
public void swap(int[] nums, int left, int right) {
15
int temp = nums[left];
16
nums[left] = nums[right];
17
nums[right] = temp;
18
}
19
}
Copied!
最近更新 2mo ago
复制链接