75. Sort Colors (Medium)-按颜色进行排序

按颜色进行排序

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

中心思想:三向切分快速排序

用两个指针left, right来分割数组。left用来记录第一个1, right用来记录从右数起第一个非2数。 left起始为0,right起始为n-1. 遍历时,
1、遇到0, 就将nums[left]和nums[i]换一换,将0换到左边去,由于现在nums[left]是0了,left++, i++;
2、遇到1,left和right都不动,i++;
3、遇到2,和Nums[right]换一换把2换到右边去,现在Nums[right]上是2所以right--, nums[i]上是0或者1,所以i不动,要继续检查是0还是1.

public class SortColors_75 {

    public void sortColors(int[] nums) {

        if (nums.length == 0) {
            return;
        }

        int left = 0, right = nums.length - 1, i = 0;

        while (i <= right) {
            if (nums[i] == 0) {
                swap(nums, left, i);
                i++;
                left++;
            } else if (nums[i] == 1) {
                i++;
            } else {
                swap(nums, right, i);
                right--;
            }
        }

    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 6,657评论 0 3
  • 排序算法几种分类方式: 1,稳定排序和不稳定排序 如果a==b, 当排序之前a在b的前面,排序后,a仍然在b...
    fly_ever阅读 3,192评论 0 0
  • 1、今天下了一天的雨,早上趁着没有雨的间隙和叶老师跟孩子们去公园活动。大雨过后的公园人很少,静悄悄的,这才...
    如水的日记阅读 1,373评论 0 1
  • 九月的风,还带着的夏天的炽热。金色的阳光撒在操场上,把主席台的女孩镀上一层光晕。她极美,皮肤白皙,亭亭玉立。...
    阿麒拉阅读 1,490评论 0 0

友情链接更多精彩内容