Loading

荷兰国旗问题

思路:使用三个变量记录下标位置: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;
}
posted @ 2019-08-23 15:11  DockerChen  阅读(132)  评论(0编辑  收藏  举报