283. 移動零
給定一個數(shù)組 nums功舀,編寫一個函數(shù)將所有 0 移動到數(shù)組的末尾,同時保持非零元素的相對順序玖雁。
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原數(shù)組上操作扇售,不能拷貝額外的數(shù)組藕届。
盡量減少操作次數(shù)本刽。
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;
}
}