码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode.排序.75颜色分类-Java

时间:2019-12-01 11:35:53      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:strong   分析   一个   整数   vat   code   col   计数   span   

1. 具体题目

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使用代码库中的排序函数来解决这道题。

示例:  输入: [2,0,2,1,1,0]  输出: [0,0,1,1,2,2]

进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常数空间的一趟扫描算法吗?

2. 思路分析

扫描数组时,遇到“2”向右抛,遇到“0”向左抛,该方法需要设置三个指针。

3. 代码

 1 public void sortColors(int[] nums) {
 2         int red = 0, blue = nums.length - 1;
 3         for(int curr = 0; curr <= blue; ){
 4             if(nums[curr] == 0){
 5                 swap(nums, curr, red);
 6                 red++;    //指向第一个非“0”元素
 7                 curr++;
 8             }else if(nums[curr] == 2){
 9                 swap(nums, curr, blue);
10                 blue--;     //指向最后一个非“2”元素
11             }else{
12                 curr++;
13             }
14         }
15     }
16     private void swap(int[] nums, int i, int j){
17         int temp = nums[i];
18         nums[i] = nums[j];
19         nums[j] = temp;
20     }

 

leetcode.排序.75颜色分类-Java

标签:strong   分析   一个   整数   vat   code   col   计数   span   

原文地址:https://www.cnblogs.com/XRH2019/p/11965328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!