目 录CONTENT

文章目录

荷兰国旗问题

小磊
2023-04-25 / 0 评论 / 0 点赞 / 651 阅读 / 298 字 / 正在检测是否收录...

荷兰国旗问题(直观的“分三块”的问题)

给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,

等于num的数放在数组的中间,大于num的数放在数组的右边。

要求额外空间复杂度O(1),时间复杂度O(N)

LeetCode 75. 颜色分类

给定一个包含红色、白色和蓝色、共n 个元素的数组nums,原地对它们进行排序,

使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。

    public static void method(int[] arr, int num) {
        int l = 0;
        int r = arr.length - 1;
        int m = arr.length - 1;
        while (l <= m) {
            if (arr[l] == num) {
                swapM(arr, l, m);
                m--;
            } else if (arr[l] > num) {
                swapR(arr, l, m, r);
                m--;
                r--;
            } else {
                l++;
            }
        }
    }

    private static void swapR(int[] arr, int l, int m, int r) {
        if (m < r) {
            int temp = arr[r];
            arr[r] = arr[l];
            arr[l] = arr[m];
            arr[m] = temp;
        }else {
            int temp = arr[r];
            arr[r] = arr[l];
            arr[l] = temp;
        }

    }

    private static void swapM(int[] arr, int l, int m) {
        int temp = arr[m];
        arr[m] = arr[l];
        arr[l] = temp;
    }
0

评论区