1. 程式人生 > 實用技巧 >sort colors 三色顏色排序 快速排序

sort colors 三色顏色排序 快速排序

Given an arraynumswithnobjects colored red, white, or blue, sort themin-placeso that objects of the same color are adjacent, with the colors in the order red, white, and blue.

Here, we will use the integers0,1, and2to represent the color red, white, and blue respectively.

Follow up:

  • Could yousolve this problem without usingthe library's sort function?
  • Could you come up with aone-pass algorithm using onlyO(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