小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
移动零
方法一:双指针
指定两个指针,左指针和右指针。右指针向右移动,每次遇到非零的元素时,与左指针交换元素,同时左指针向右移动一位。
这样的结构有如下两种性质:
- 左指针左边均是非零的数字
- 右指针左边知道左指针都是零
class Solution {
public void moveZeroes(int[] nums) {
//创建两个指针
int left = 0;
int right = 0;
int length = nums.length;
while (right < length) {
if (nums[right] != 0) {
//交换左右指针元素
swap(right, left, nums);
left++;
}
right++;
}
}
private void swap(int right, int left, int[] nums) {
int temp = nums[right];
nums[right] = nums[left];
nums[left] = temp;
}
}
类似的方法:
class Solution {
public void moveZeroes(int[] nums) {
//1.创建一个指针,这个指针左侧都是非0的元素,右侧到index的之间为0
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[j] = nums[i];
if (i != j) {
nums[i] = 0;
}
j++;
}
}
}
}
\