【leetcode】75.Sort Colors

题目说明

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

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

解法1

时间复杂度:O(n)

空间复杂度:O(1)

思路:使用计数排序法,先遍历一遍统计出各个颜色的个数,然后再遍历第二遍,按指定顺序赋值。

void sortColors(vector<int>& nums)
{
    int count0 = 0,count1 = 0, count2 = 0;

    for (int i = 0; i < nums.size(); i ++)
    {
        if (nums[i] == 0)
            count0 ++;
        else if (nums[i] == 1)
            count1 ++;
        else if (nums[i] == 2)
            count2 ++;
    }
    for (int i = 0; i < nums.size(); i ++)
    {
        if (i < count0)
            nums[i] = 0;
        else if ( i < count0 + count1)
            nums[i] = 1;
        else
            nums[i] = 2;
    }
}

解法2

时间复杂度:O(n)

空间复杂度:O(1)

思路:桶排序,建立数组来记录各个数值的个数,数组的下标即数值,数组中各个元素即相应的个数。第一次循环,将记录装入数组,第二次循环,将数组依次放入待排序数组之中。即完成排序。

比第一种解法更具拓展性。

桶排序

void sortColors(vector<int>& nums)
{
    int count[3] = {0};

    for (int i = 0; i < nums.size(); i ++)
    {
        count[nums[i]] ++;
    }

    int j = 0;
    for (int i = 0; i < nums.size();)
    {
        if (count[j]-- > 0)
        {
            nums[i++]  = j;
        }
        else
            j ++;//下一个桶
    }
}

原文地址:https://www.cnblogs.com/JesseTsou/p/10322351.html

时间: 2024-12-21 03:15:49

【leetcode】75.Sort Colors的相关文章

【一天一道LeetCode】#75. Sort Colors

一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white a

【leetcode】905. Sort Array By Parity

题目如下: 解题思路:本题和[leetcode]75. Sort Colors类似,但是没有要求在输入数组本身修改,所以难度降低了.引入一个新的数组,然后遍历输入数组,如果数组元素是是偶数,插入到新数组头部,否则追加到尾部. 代码如下: class Solution(object): def sortArrayByParity(self, A): """ :type A: List[int] :rtype: List[int] """ res =

【LeetCode】排序 sort(共20题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [56]Merge Intervals [57]Insert Interval [75]Sort Colors [147]Insertion Sort List [148]Sort List [164]Maximum Gap [179]Largest Number [242]Valid Anagram [252]Meeting Rooms (2018年11月22日,为

【LeetCode】Insertion Sort List

题目 Sort a linked list using insertion sort. 解答 链表无法像数组那样从后往前依次比较插入,只能从前往后:在链表首部添加一个哨兵可以稍微简化下代码,代码如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * }

LeetCode OJ 75. Sort Colors

Given an array with n objects colored red, white or blue, sort them 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 0, 1, and 2 to represent the color red, white, and bl

【leetcode】Insertion Sort List (middle)

Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分完全分开,指针不要有交叉. 即不会通过->next 重叠 class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head == NULL) return NULL; ListNode * ans = hea

【leetcode】148. Sort List

题目说明 https://leetcode-cn.com/problems/sort-list/description/ 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 解法1 使用归并排序对链表进行排序 /* * 时间复杂度:O(nlogn) * 归并排序的递归实现 */ ListNode* sortList(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode

【LeetCode】Sort Colors

LeetCode OJ Given an array with n objects colored red, white or blue, sort them 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 0, 1, and 2 to represent the color red, w

【LeetCode】数组

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [1]Two Sum [4]Median of Two Sorted Arrays [11]Container With Most Water [15]3Sum [16]3Sum Closest [18]4Sum [26]Remove Duplicates from Sorted Array [27]Remove Element [31]Next Permutatio