思路:使用三个变量记录下标位置:less,cur,more。less表示小于num数的下标,more表示大于num数的上标,cur表示当前遍历数的下标。
关键代码:
public static int[] netherlandsflag(int[] arr, int left, int right, int num) {
int less = left - 1;
int more = right + 1;
int cur = left;
while (cur < more) {
if (arr[cur] < num) {
swap(arr, ++less, cur++);
} else if (arr[cur] > num) {
swap(arr, cur, --more);
} else {
cur++;
}
}
return new int[]{less , more };
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}