LeetCode 283题 -> 移动零
1. 题目描述
-
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
-
示例
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
2. 解题思路
- 思路1:移动非零元素
- 思路2:双指针思路
3. 代码实现
import java.util.Arrays;
public class MoveZeroes {
/**
* 1.移动非零元素
* @param nums
*/
public static void moveZeroes(int[] nums){
int index = 0;
for (int i = 0; i < nums.length; i++) {
if(nums[i] != 0){
nums[index++] = nums[i];
}
}
while (index < nums.length){
nums[index++] = 0;
}
}
/**
* 2.双指针思路
* @param nums
*/
public static void moveZeroesByPointer(int[] nums){
int left = 0;
int right = 0;
while (right < nums.length){
if(nums[right] != 0){
swap(nums,left,right);
left++;
}
right++;
}
}
public static void swap(int[] nums, int a, int b){
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}