package com.app.main.LeetCode;
import java.util.ArrayList;
import java.util.List;
/**
* 283
*
* easy
*
* https://leetcode.com/problems/move-zeroes/
*
* Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.
*
* Example:
*
* Input: [0,1,0,3,12]
* Output: [1,3,12,0,0]
* Note:
*
* You must do this in-place without making a copy of the array.
* Minimize the total number of operations.
* Created with IDEA
* author:Dingsheng Huang
* Date:2019/10/6
* Time:下午9:23
*/
public class MoveZeroes {
public void moveZeroes(int[] nums) {
int len = nums.length;
for (int i = 0; i < len - 1; i++) {
if (nums[i] == 0) {
int tranfer = findFistNonZero(nums, i + 1);
if (tranfer == -1) {
return;
} else {
// do change
nums[i] = nums[tranfer];
nums[tranfer] = 0;
}
}
}
}
private int findFistNonZero(int[] nums, int start) {
for (int i = start; i < nums.length; i ++) {
if (nums[i] != 0) {
return i;
}
}
return -1;
}
public void moveZeroes2(int[] nums) {
List<Integer> integers = new ArrayList<>();
for (Integer i : nums) {
if (i != 0) {
integers.add(i);
}
}
int nonZeroSize = integers.size();
int ZeroSize = nums.length - nonZeroSize;
for (int j = 0; j < nums.length; j++) {
if (j <= nonZeroSize - 1) {
nums[j] = integers.get(j);
} else {
nums[j] = 0;
}
}
}
public void moveZeroes3(int[] nums) {
int divideFlag = 0;
for (int i : nums) {
if (i != 0) {
nums[divideFlag] = i;
divideFlag++;
}
}
while (divideFlag <= nums.length - 1) {
nums[divideFlag] = 0;
divideFlag++;
}
}
}