每天一道算法题2
2022-01-17 本文已影响0人
雨打空城
【荷兰国旗问题】
给定一个数组arr,和一个数num,请把小于num的数放在数组的
左边,等于num的数放在数组的中间,大于num的数放在数组的
右边,请返回小于num的最右下标和大于num数的最左边一个数的下标
public class NetherlandsFlag {
public static int[] partition(int[] arr, int l, int r, int p) {
int less = l - 1;
int more = r + 1;
while(l < more) {
if (arr[l] < p) {
swap(arr, ++less, l++);
} else if (arr[l] > p) {
swap(arr, --more, l);
} else {
l++;
}
}
return new int[] {less + 1, more -1};
}
}