假设把只包含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     }

 

posted @ 2020-10-30 22:03  不好喝的柚子茶  阅读(310)  评论(0编辑  收藏  举报