假设把只包含01的数组(如{0,0,1,1,1,0,1,0,0,1})按照升序排序,可以任意交换两个数的位置,请输出最少需要交换的次数。
题目:
假设把只包含01的数组(如{0,0,1,1,1,0,1,0,0,1})按照升序排序,可以任意交换两个数的位置,请输出最少需要交换的次数。
解决方法:双指针法
1 public static int sum = 0; 2 public static void main(String[] args) { 3 int[] arr = {0, 0, 1, 1, 1, 0, 1, 0, 0, 1}; 4 System.out.println(sort(arr, 0, arr.length - 1)); 5 System.out.println("交换完成后"); 6 for (int i = 0; i < arr.length; i++) { 7 System.out.print(arr[i] + " "); 8 } 9 } 10 11 private static int sort(int[] arr, int l, int r) { 12 int temp; 13 while (arr[l] == 0) { 14 l++; 15 } 16 while (arr[r] == 1) { 17 r--; 18 } 19 if (r > l) { 20 temp = arr[l]; 21 arr[l] = arr[r]; 22 arr[r] = temp; 23 sum++; 24 l++; 25 r--; 26 sort(arr, l, r); 27 } 28 return sum; 29 }