首页 > 其他 > 详细

LeetCode Sort Colors

时间:2015-10-01 23:04:46      阅读:533      评论:0      收藏:0      [点我收藏+]

原题链接在这里:https://leetcode.com/problems/sort-colors/

Method 1 是bucket sort, 数个数,然后依次排回原数组,会扫两遍数组

Mehod 2 是利用多个指针,指针的个数是不同元素个数-1. 例如本题中有 0 1 2三种数字,就设两个指针。

第一个指针idx0指向最后一个0,第二个指针idx1指向最后一个1,不需要指向最后一个2的指针,它会指向nums[nums.length-1].

每当遇到0时,idx0和idx1都往后移动,每当遇到1时,idx1往后移动。

Note: 移动前A[i]都付值成2,若是要移动idx1, nums[idx1]赋值成1,若是要移动idx0, nums[idx0] 赋值成0, 基本思路就是三个或者两个数之间的swap.

AC Java:

 1 public class Solution {
 2     public void sortColors(int[] nums) {
 3         /*
 4         //Method 1 Bucket sort
 5         if(nums == null || nums.length == 0){
 6             return;
 7         }
 8         int [] colorCount = new int[3];
 9         Arrays.fill(colorCount,0);
10         for(int i = 0; i<nums.length; i++){
11             colorCount[nums[i]]++;
12         }
13         int z = 0;
14         for(int i = 0; i<=2; i++){
15             while(colorCount[i]>0){
16                 nums[z] = i;
17                 z++;
18                 colorCount[i]--;
19             }
20         }
21         */
22         
23         //Method 2
24         if(nums == null || nums.length == 0){
25             return;
26         }
27         int idx0 = 0;
28         int idx1 = 0;
29         for(int i = 0; i<nums.length; i++){
30             if(nums[i] == 0){
31                 nums[i] = 2;
32                 nums[idx1] = 1;
33                 nums[idx0] = 0;
34                 idx1++;
35                 idx0++;
36             }else if(nums[i] == 1){
37                 nums[i] = 2;
38                 nums[idx1] = 1;
39                 idx1++;
40             }
41         }
42     }
43 }

 

LeetCode Sort Colors

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4851697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!