leet75:颜色分类

谁说我不能喝 提交于 2020-01-12 02:17:13

在这里插入图片描述

本问题被称为 荷兰国旗问题

,最初由 Edsger W. Dijkstra提出。

public static void sortColors(int[] nums) {
    // 对于所有 idx < i : nums[idx < i] = 0
    // j是当前考虑元素的下标
    int p0 = 0, curr = 0;
    // 对于所有 idx > k : nums[idx > k] = 2
    int p2 = nums.length - 1;

    int tmp;
    while (curr <= p2) {
        if (nums[curr] == 0) {
            // 交换第 p0个和第curr个元素
            // i++,j++
            tmp = nums[p0];
            nums[p0++] = nums[curr];
            nums[curr++] = tmp;
        }
        else if (nums[curr] == 2) {
            // 交换第k个和第curr个元素
            // p2--
            tmp = nums[curr];
            nums[curr] = nums[p2];
            nums[p2--] = tmp;
        }
        else curr++;
    }

    for (int i = 0; i <nums.length ; i++) {
        System.out.print(nums[i]+" ");
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!