zoukankan      html  css  js  c++  java
  • 假设把只包含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     }

  • 相关阅读:
    wenbao与manacher
    wenbao与拓扑排序
    wenbao与邻接表
    wenbao与最短路floyd
    wenbao与最短路dij
    wenbao与后缀自动机(SAM)
    wenbao与欧拉回路
    wenbao与字符串Hash
    wenbao与后缀数组
    wenbao与扩展kmp
  • 原文地址:https://www.cnblogs.com/buhaohedeyouzicha/p/13904505.html
Copyright © 2011-2022 走看看