【经典算法题】颜色分类

【经典算法题】颜色分类,第1张

【经典算法题】颜色分类 【经典算法题】颜色分类 Leetcode 0075 颜色分类

题目描述:Leetcode 0075 颜色分类

分析

  • 本题的考点:三路快排

  • 本题需要使用三个指针i、j、k,初始i=0, j=0, k=nums.size()-1;其中[0, j-1]存储0,[j, i-1]存储1,[k+1, nums.size()-1]存储2,刚开始三个区间都为空区间,满足定义。

  • 具体分为三种情况,如下图:

代码

  • C++
class Solution {
public:
    void sortColors(vector& nums) {

        for (int i = 0, j = 0, k = nums.size() - 1; i <= k; ) {
            if (nums[i] == 0) swap(nums[i++], nums[j++]);
            else if (nums[i] == 2) swap(nums[i], nums[k--]);
            else i++;
        }
    }
};
  • Java
class Solution {
    public void sortColors(int[] nums) {

        for (int i = 0, j = 0, k = nums.length - 1; i <= k; ) {
            if (nums[i] == 0) swap(nums, i++, j++);
            else if (nums[i] ==2) swap(nums, i, k--);
            else i++;
        }
    }

    private void swap(int[] nums, int i, int j) {
        int t = nums[i]; nums[i] = nums[j]; nums[j] = t;
    }
}
  • Python
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0; j = 0; k = len(nums) - 1
        while i <= k:
            if nums[i] == 0:
                nums[j], nums[i] = nums[i], nums[j]
                i += 1; j += 1
            elif nums[i] == 2:
                nums[i], nums[k] = nums[k], nums[i]
                k -= 1
            else:
                i += 1

时空复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),n为数组长度。

  • 空间复杂度: O ( 1 ) O(1) O(1)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存