给定一个数组arr,和一个数num,请把小于等于num的数放在数
组的左边,大于num的数放在数组的右边。
要求额外空间复杂度O(1),时间复杂度O(N)
问题二(荷兰国旗问题)
给定一个数组arr,和一个数num,请把小于num的数放在数组的
左边,等于num的数放在数组的中间,大于num的数放在数组的
右边。
要求额外空间复杂度O(1),时间复杂度O(N)
代码演示:
public class Code_08_NetherlandsFlag {
public static int[] partition(int[] arr, int l, int r, int num) {
int less = l - 1;
int more = r + 1;
int cur=l;
while (cur< more) {
if (arr[cur] < num) {
swap(arr, ++less, index++);
} else if (arr[cur] > num) {
swap(arr, --more, cur);
} else { //=num的
cur++;
}
}
return new int[] { less + 1, more - 1 };
}
分析:
今天好累……
不想说话 。。。。。。