參考自:https://blog.csdn.net/qq_38200548/article/details/80688630
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
1.必須在原陣列上操作,不能拷貝額外的陣列。
2.儘量減少操作次數。
package suanfa; public class demo2 {
public static void main(String[] args) {
//隨便定義一個數組
int[] arr={1,2,0,3,0,4,5,0};
moveZeros(arr);
for (int i : arr) {
System.out.print(i+" ");
}
}
private static void moveZeros(int[] arr) {
//定義了兩個快慢指標
int slow=0,fast=0;
while(fast<arr.length) {
if (arr[fast] != 0) {
arr[slow] = arr[fast];
slow++;
fast++;
} else {// 一旦這個陣列上的數字是0,那麼fast指標就需要往前走
// slow指標停留在0這個位置,在等待著fast發現了非0的數字將0位置的slow指標覆蓋掉
fast++;
}
}
// slow跟fast相差了多少,就說明這個陣列有多少個0,在上面填充完元素之後,
// 就需要將漏掉的0補上
for (int i = slow; i <arr.length ; i++) {
arr[i]=0;
}
}
}