有 n 长度的 char 数组。数组只能包含任何顺序 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 );
}
}
}