正数、负数和零的挪动问题
把0挪放到最后
public class Test3 { public static void appendZero(int[] arr) { int left = 0; int right = arr.length-1; while (left <= right) { //从右边走起看右边 如果不是0 那么去右边找个0 来换,如果是0 就往左边移动 while (right>=0 && arr[right] ==0){ right--; } if (arr[right]!=0){ while (left < right && arr[left] !=0){ left++; } swap(left, right, arr); } right--; } } public static void swap(int left, int right, int[] arr) { int temp = arr[left]; arr[left]=arr[right]; arr[right]=temp; } public static void main(String[] args) { int[] arr = {1,2,0,3,0,5,-1,4,-5}; appendZero(arr); for (int result : arr){ System.out.print(result+" "); } } }
这样的结果是不能保证非0的数组元素顺序的:
所以可以用空间换时间的方法做:
public class Test3 { public static void appendZero(int[] arr) { int right = arr.length - 1; int indexResultArr = 0; int[] resultArr =new int[arr.length]; for (int i = 0; i < arr.length; i++) { if (arr[i]==0) { resultArr[right]=0; right--; }else if (arr[i] !=0){ resultArr[indexResultArr]=arr[i]; indexResultArr++; } } for(int i=0; i<arr.length; i++) { arr[i]=resultArr[i]; } } public static void main(String[] args) { int[] arr = { 1, 2, 0, 3, 0, 5, -1, 4, -5 }; appendZero(arr); for (int result : arr) { System.out.print(result + " "); } } }
这样是比较简单的