java - 需要按 'R' 、 'B' 、 'W' 的顺序对任意长度的字符数组进行排序

标签 java arrays algorithm sorting data-structures

<分区>

有一个长度为n的字符数组。数组只能包含任何顺序为 R、B、W 的元素。 您需要对数组进行排序,以便顺序应为 R、B、W,即所有 R 将首先出现,然后是 B,然后是 W。
约束条件:时间复杂度为O(n),空间复杂度为O(1)。
假设:您可以假设一个交换方法带有签名 swap(char[] arr, int index1, int index2) 在单位时间内交换数字。
实现方法: public sort(char[]array);

这是我的实现。感谢任何人提供更好的解决方案。如果有任何错误,任何人都可以自由地指出我。

 public static void sort(char[] arr){
     int rIndex = 0, wIndex = arr.length -1;
     for (int i = 0 ; i <= wIndex; i ++ ){
         if ( arr[i] == 'R' ){
             swap(arr, i , rIndex ++ );
         } else if (arr[i] == 'W' ){
             swap(arr, i , wIndex -- );
         }else if ( arr[i] == 'B' ){
             swap(arr, i , rIndex );
         }
     }
    }

最佳答案

我不确定这个问题是否在 SO 的范围内,但我还是会提出一个替代解决方案,主要是因为我发现任务规范很烦人。不需要实际的“排序”。 :)

public static void sort(char[] arr) {
    int r = 0, b = 0, w = 0;
    for(int i = 0; i < arr.length; i++) {
        if(arr[i] == 'R') r++;
        else if(arr[i] == 'B') b++;
        else w++;
    }
    int o = 0;
    for(; r > 0; r--) arr[o++] = 'R';
    for(; b > 0; b--) arr[o++] = 'B';
    for(; w > 0; w--) arr[o++] = 'W';
}

关于java - 需要按 'R' 、 'B' 、 'W' 的顺序对任意长度的字符数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068537/

相关文章:

java - Opennlp 1.5 用于 SentenceDetector?

java - 在 App Engine 上使用 Jersey API 客户端

javascript - 用于带数组的嵌套 JSON 的 ExtJS 4 编写器

java - 为什么要在对象数组类中创建对象数组?

java - Lambda 的行为与匿名内部类不同

java - 如何隐藏主屏幕状态栏?或者一些隐藏而不修改主屏幕的应用程序?

java - 操作++/-- 的参数无效

javascript - 重置多维数组的最快方法?

algorithm - 子集总和方法总数的递归关系

c++ - 将字符串中表示的大数除以 3