283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
public class LeetCode283 {
public static void main(String[] args) {
int[] nums = new int[]{0, 1, 0, 3, 12};
int[] result = moveZeroes4(nums);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + ",");
}
}
/**
* 思路一
*
* @param nums
* @return
*/
public static int[] moveZeroes1(int[] nums) {
int[] tmps = new int[nums.length];
int k = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
tmps[k] = nums[i];
k++;
}
}
for (int i = k; i < nums.length; i++) {
tmps[i] = 0;
}
return tmps;
}
/**
* 思路二
*
* @param nums
* @return
*/
public static int[] moveZeroes2(int[] nums) {
for (int i = 0, j = 0; i < nums.length; i++) {
if (nums[i] != 0) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
j++;
}
}
return nums;
}
/**
* 思路三
*
* @param nums
* @return
*/
public static int[] moveZeroes3(int[] nums) {
int k = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[k] = nums[i];
k++;
}
}
for (int i = k; i < nums.length; i++) {
nums[i] = 0;
}
return nums;
}
/**
* 思路四
*
* @param nums
* @return
*/
public static int[] moveZeroes4(int[] nums) {
int k = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
if (i != k) {
nums[k] = nums[i];
}
k++;
}
}
for (int i = k; i < nums.length; i++) {
nums[i] = 0;
}
return nums;
}
}