参考自: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://www.haodehen.cn/did238244