75. Sort Colors

本文介绍了一种解决荷兰国旗问题的高效算法,通过使用三个指针(left、current、right)来对数组进行排序,确保0、1、2三种颜色分别位于数组的前中后部分。此算法避免了不必要的元素移动,提高了排序效率。

一、题目

  1、审题

  

  2、分析

    荷兰国旗问题。用 0,1,2 代表颜色,将数组中的所有的 0 排在前面, 1 排在中间,2排在后面。

 

二、解答

  1、思路:

    ①、选用三个指针。 left 与 current 指向下标为 0 的元素; right 指向数组末尾。

    ②、遍历数组,当 current <= right 时:

      当 current 指向元素为 0 时,交换 left、current 的值,同时 left++,current++;

      当 current 指向元素为 1 时,current++;

      当current 指向元素为 2 时,交换 current、right 值,同时 right--

public void sortColors2(int[] nums) {
        
        int len = nums.length;
        if(len < 2)
            return;
        
        int left = 0;
        int right = len - 1;
        int current = 0;
        while(current <= right) {
            if(nums[current] == 0){
                swap(nums, left, current);
                left++;
                current++;
            }
            else if(nums[current] == 1) {
                current++;
            }
            else {
                swap(nums, right, current);
                right--;
            }
        }
    }

 

转载于:https://www.cnblogs.com/skillking/p/9689501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值