[leetcode]75. Sort Colors

原创 2016年05月31日 00:11:52

题目地址

https://leetcode.com/problems/sort-colors/

题目大意

一个含有n个整数数组,元素由0 1 2构成,排列随机。在O(n)时间复杂度,O(1)空间复杂度下,将其按升序排序。

解题思路

解一

首先遍历一遍,记录0,1,2个数,然后重新填充数组。

解二

使用两个标记为,a记录距离数组起始最近的非0元素,b记录距离数组尾最近的非2元素。遍历两个标记之间,遇到0与a标记元素交换,遇到2与b标记元素交换。

代码

解一

class Solution {
public:
    void sortColors(vector<int>& nums) {
        if (nums.size() == 0) {
            return;
        }
        int red = 0;
        int white = 0;

        for (int i = 0; i != nums.size(); ++i) {
            if (nums[i] == 0) {
                ++red;
            }
            if (nums[i] == 1) {
                ++white;
            }
        }

        for (int i = 0; i != nums.size(); ++i) {
            if (red != 0) {
                nums[i] = 0;
                --red;
            } else if (white != 0) {
                nums[i] = 1;
                --white;
            } else {
                nums[i] = 2;
            }
        }
        return;
    }
};

解二

class Solution {
public:
    void sortColors(vector<int>& nums) {
        if (nums.empty()) {
            return;
        }
        int size = nums.size();
        int start = 0;
        while (start < size && nums[start] == 0) {
            start++;
        }

        int end = size - 1;
        while (end >= 0 && nums[end] == 2) {
            end--;
        }

        int i = start;
        while (start < end && i <= end && start < size && end >= 0) {
            if (nums[i] == 1) {
                ++i;
                continue;
            }
            if (nums[i] == 0) {
                nums[i] = nums[start];
                nums[start] = 0;
                start++;
            } else if (nums[i] == 2){
                nums[i] = nums[end];
                nums[end] = 2;
                end--;
                if (nums[start] == 0) {
                    start++;
                    i++;
                }
            }
        }
    }
};
版权声明:本作品由掠雪墨影创作,采用知识共享署名 4.0 国际许可协议进行许可。转载请以链接形式标明本文地址。

LeetCode OJ 系列之75 Sort Colors --Python

Problem: Given an array with n objects colored red, white or blue, sort them so that objects of...
  • ln152315
  • ln152315
  • 2015年12月09日 01:37
  • 416

LeetCode 75(Sort Colors)Java

原题:Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • Jassy1994
  • Jassy1994
  • 2016年12月01日 09:41
  • 162

leetCode 75.Sort Colors (颜色排序) 解题思路和方法

Given an array with n objects colored red, white or blue, sort them so that objects of the same colo...
  • xygy8860
  • xygy8860
  • 2015年07月19日 16:38
  • 649

Leetcode_75_Sort Colors

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43302343 Given an array wi...
  • pistolove
  • pistolove
  • 2015年01月30日 07:32
  • 1405

LeetCode(75)Sort Colors (荷兰三色旗问题 Dutch National Flag)

题目如下: The flag of the Netherlands consists of three colours: red, white and blue. Given balls of the...
  • feliciafay
  • feliciafay
  • 2014年02月10日 03:42
  • 4593

【LeetCode】Sort Colors 解题报告

【题目】 Given an array with n objects colored red, white or blue, sort them so that objects of the same...
  • ljiabin
  • ljiabin
  • 2014年10月13日 20:51
  • 4748

LeetCode - 75. Sort Colors

第一种方法是基于计数排序的算法,需要对数组进行两遍的扫描,第一遍统计红,白和蓝的数目,第二遍生成新的数组。这种方法可以进行扩展,对于数组中数字范围已知的情况,都可以使用这种算法。时间复杂度为O(n),...
  • shenzhu0127
  • shenzhu0127
  • 2016年07月03日 12:47
  • 152

【LeetCode】75. Sort Colors

Difficulty: Medium Given an array with n objects colored red, white or blue, sort them so t...
  • Juxin_Lin
  • Juxin_Lin
  • 2017年01月14日 23:28
  • 114

LeetCode 75. Sort Colors

Given an array with n objects colored red, white or blue, sort them so that objects of the same colo...
  • github_34333284
  • github_34333284
  • 2016年04月10日 05:17
  • 168

Leetcode——75. Sort Colors

题目:Given an array with n objects colored red, white or blue, sort them so that objects of the same c...
  • starstar1992
  • starstar1992
  • 2017年01月26日 14:38
  • 171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode]75. Sort Colors
举报原因:
原因补充:

(最多只允许输入30个字)