【Leetcode】Leetcode 75.颜色分类

LeetCode力扣 75. 颜色分类 冒泡排序法,计数法 75. 颜色分类 难度中等1190收藏分享切换为英文接收动态反馈 给定一个包含红色、白色和蓝色、共n个元素的数组nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数0、1和2分别表示红色、白色和蓝色。 必须在不使用库的sort函数的情况下解决这个问题。 示例 1: 输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 示例 2: 输入:nums = [2,0,1] 输出:[0,1,2] ... 阅读详情

Leetcode 75.颜色分类

题目:

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

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

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

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

进阶:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-colors

思路:

官方解答

通过代码:

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        l = 0
        r = len(nums)-1
        while(i <= r):
            if(nums[i] == 2):
                nums[i],nums[r] = nums[r],nums[i]
                r = r - 1
            elif(nums[i] == 0):
                nums[i],nums[l] = nums[l],nums[i]
                l = l + 1
                i = i + 1
            else:
                i = i + 1

复杂度分析

时间复杂度 :由于对长度 NN的数组进行了一次遍历,时间复杂度为O(N)O(N) 。
空间复杂度 :由于只使用了常数空间,空间复杂度为O(1)O(1) 。

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置) 本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。 阅读详情

相关推荐

【中等】力扣算法题解析LeetCode75颜色分类

本文介绍了如何在不使用库函数的情况下,原地对包含0、1、2的数组进行排序(荷兰国旗问题)。通过三指针法(left、right、current),将0交换到数组左侧,2交换到右侧,1保留在中间。算法仅需一趟扫描(时间复杂度O(n))和常数空间(空间复杂度O(1)),高效且直观。代码使用Java实现,并通过交换函数完成元素位置调整,确保排序正确性。

ylumwd的博客 852

力扣75. 颜色分类 题解

力扣73. 颜色分类 想法:使用常数空间的一趟扫描算法。定义三个指针left,right,p。left作为左端点,right作为右端点,p初始值为0,移动p对nums[p]进行判断,为0则与nums[left]交换,交换后p++,left++ 。为2,则与nums[right]进行交换,注意这里不能交换完就p++ ,因为原本的nums[right]并未做出判断,交换后则需要再进行判断,随后进行相应的自加。 代码: void sortColors(int* nums, int numsSize){

qq_45836906的博客 483

<IBM DB2>《DB2 官方监控脚本 2022版本》

DB2 监控脚本

Else 的博客 633

力扣LeetCode #75 颜色分类(SortColors)

- 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 提示: n == nums.length 1 <= n <= 300 nums[i] 为 0、1 或 2 进阶: 你可以不使用代码库中的排序函数来解决这道题吗? 你能想出一个仅使用常数空间的一趟扫描算法吗? 来源:LeetCode - 示例 示例 1: 输入:nums = [2,0,2

weixin_49155948的博客 376

【数组】力扣75题:颜色分类

建议在看题目之前先了解数组的具体知识点,可以看这里: [算法基础(二):数组知识点及题型讲解]

niexinyu0026的博客 916

LeetCode 75 颜色分类

LeetCode 75 颜色分类 题目链接 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 简单计数题,直接用 mapmapmap 标记即可,AC代码如下: class Solution { public: void s

旺崽的博客 3895

leetcode75. 颜色分类

颜色分类

热爱C++和golang的学生 1388

力扣75. 颜色分类

O(n),两次遍历总次数为2n,线性复杂度,时间消耗低。

2503_91570191的博客 1047

LeetCode75题_颜色分类

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

qq_40263592的博客 1333

LeetCode75. 颜色分类

本文介绍了荷兰国旗问题的解法,要求将只含0、1、2的数组原地排序。核心方法是三指针分区算法:使用left、cur、right三个指针将数组分为0、1、2三个区域,通过交换元素实现单趟O(n)排序。相比计数排序需要两次遍历和快速排序的O(nlogn)复杂度,三指针算法在时间和空间上都是最优解。关键点在于处理2时保持cur不变以检查交换来的元素,确保正确分区。该算法适用于类似的三值分类问题。

qq_32019341的博客 1308

LeetCode-75 颜色分类

LeetCode-75 颜色分类 题目链接:LeetCode-75 题目大意:数组中包含0,1,2三种数字 将数组排序 不能用Arrays.sort()排序进行 解题思路:普通的排序就可以解决 但是这样做就浪费了这道题 我的思路是使用两个坐标left 和right 意义是当前处理的坐标 和处理完的“2”序列最前面的坐标 left从0开始 遇到1就保持现状不变并把left向右移动一位(保证了0在最...

鱼头的水题之路 215

LeetCode力扣练习》第75颜色分类 Java

LeetCode力扣练习》第75颜色分类 Java 一、资源 题目: 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库的sort函数的情况下解决这个问题。 示例 1: 输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 示例 2: 输入:nums = [2,0,1] 输出:[0,1,2] 提示: n

XRT_knives的博客 355

LeetCode75 颜色分类

LeetCode75 颜色分类 题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 想法 可以参考快速排序,只是要处理相等的情况 而且不需要递归 代码实现 public class LeetCode75 { public static void main(String[] args) { int nums[]= {2,0,1}; LeetC

qq_45671761的博客 388

leetcode 75.颜色分类

LeetCode75题“颜色分类”要求对包含红色、白色和蓝色的数组进行排序,红色、白色和蓝色分别用0、1和2表示。这个问题可以通过荷兰国旗问题的解决方案来实现,该算法的时间复杂度为O(N),空间复杂度为O(1)。有一个简单的思路,这种方法虽然简单直观,但它不是题目要求的单次遍历解决方案。不过,对于理解问题和学习排序的基本概念非常有帮助。这种方法高效且简单,适用于大多数情况下需要对包含少数类别的数组进行分类排序的场景。

m0_49013185的博客 1058

分治-快排-75.颜色分类-力扣(LeetCode)

给定一个数组将其元素按照0,1,,2三段式排序,并且在原地进行排序。用cur遍历数组,left记录0的最左侧,right记录2的最右侧。left初始值为-1,right的初始值为n,cur初始值为0.通过示例来得出nums[i]的三中情况。省流版,循环条件为cur<right。

black_bear_white的博客 538

Leetcode75.颜色分类

核心目标是在 O(n) 时间复杂度、O(1) 空间复杂度内,将仅包含 0、1、2 的数组原地排序,最终实现:所有 0 位于数组最前端,1 位于中间,2 位于末尾。p0:标记「下一个 0 应该放置的位置」,初始值为 0(数组起始处)。p1:标记「下一个 1 应该放置的位置」,初始值为 0(数组起始处)。i:数组遍历指针,逐个处理每个元素。时间复杂度:O(n) —— 仅遍历数组一次,每个元素的操作都是常数级。空间复杂度:O(1) —— 仅使用 3 个额外变量(p0、p1、i),无额外数组或容器开销。

qq_53758858的博客 827

Leetcode 75. 颜色分类

Leetcode 75. 颜色分类1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/sort-colors/   本质上就是一个排序问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "algorithm" #in

珍惜 8749

LeetCode 力扣 75. 颜色分类

题目描述(中等难度) 给一个数组,含有的数只可能 0,1,2 中的一个,然后把这些数字从小到大排序。 解法一 题目下边的 Follow up 提到了一个解法,遍历一次数组,统计 0 出现的次数,1 出现的次数,2 出现的次数,然后再遍历数组,根据次数,把数组的元素改成相应的值。当然我们只需要记录 0 的次数,和 1 的次数,剩下的就是 2 的次数了。 public void sortColors...

wind_liang的博客 991

最大堆、最大堆的应用及其python实现

堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个节点对应数组的一个元素。除了最底层外,该树是完全充满的,而且是从左到右填充的。 堆一般可以分为两种形式:最大堆和最小堆。最大堆是指,根节点的值大于其孩子节点的值;最小堆是指,根节点的值小于其孩子节点的值。 A.length表示数组元素的个数,A.heap-size表示有多少个堆元素,left表示i节点的左节点,如下图所示,left =...

voidfaceless的博客 5083

磷酸铁锂电池充放电数据.zip

电池充放电数据

上一篇: 【tensorflow】tf.squeeze用法
下一篇: 【Leetcode】Leetcode 206.反转链表
voidfaceless
博客等级 码龄10年 100粉丝 114原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值