zoukankan      html  css  js  c++  java
  • sort colors 三色颜色排序 快速排序

    Given an array nums with n objects colored red, white, or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white, and blue.

    Here, we will use the integers 01, and 2 to represent the color red, white, and blue respectively.

    Follow up:

    • Could you solve this problem without using the library's sort function?
    • Could you come up with a one-pass algorithm using only O(1) constant space?

     

    Example 1:

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

    Example 2:

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

    Example 3:

    Input: nums = [0]
    Output: [0]
    

    Example 4:

    Input: nums = [1]
    Output: [1]
    

     

    思路:不是比较元素,是比较index。元素只要跟基准比较就行了。

    中间的if不动了,此时还是left <= right。双方换一下

    class Solution {
        public void sortColors(int[] nums) {
            int left = 0;
            int right = nums.length - 1;
            //和1比较
            while (left <= right) {
                while (left < right && nums[left] < 1) {
                    left++;
                }
                
                while (left <= right && nums[right] >= 1) {
                    right--;
                }
                
                if (left <= right) {
                    int temp = nums[left];
                    nums[left] = nums[right];
                    nums[right] = temp;
                    
                    left++;
                    right--;
                }
            }
            
            //重设left right
            left = 0;
            right = nums.length - 1;
            
            //和2比较
            while (left <= right) {
                while (left < right && nums[left] < 2) {
                    left++;
                }
                
                while (left <= right && nums[right] >= 2) {
                    right--;
                }
                
                if (left <= right) {
                    int temp = nums[left];
                    nums[left] = nums[right];
                    nums[right] = temp;
                    
                    left++;
                    right--;
                }
            }
            
        }
    }
    View Code
  • 相关阅读:
    希腊字母写法
    The ASP.NET MVC request processing line
    lambda aggregation
    UVA 10763 Foreign Exchange
    UVA 10624 Super Number
    UVA 10041 Vito's Family
    UVA 10340 All in All
    UVA 10026 Shoemaker's Problem
    HDU 3683 Gomoku
    UVA 11210 Chinese Mahjong
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13872345.html
Copyright © 2011-2022 走看看