参考自: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 ;
}
}
}
查看更多关于算法题——给定一个数组 arr,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did238244