每天一道算法题2

【荷兰国旗问题】
给定一个数组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};
    }
}

你可能感兴趣的:(每天一道算法题2)