leetcode 颜色分类_LEETCODE

leetcode 颜色分类_LEETCODE给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1] 提示:n == num

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]
示例 3:

输入:nums = [0]
输出:[0]
示例 4:

输入:nums = [1]
输出:[1]
 

提示:

n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2
 

进阶:

你可以不使用代码库中的排序函数来解决这道题吗?
你能想出一个仅使用常数空间的一趟扫描算法吗?

题解

  1. 快排
class Solution { 
   
public:
    void quick(int l,int r,vector<int>& nums){ 
   
        if(l < r){ 
   
            int mid = partion(l,r,nums);
            quick(l,mid - 1,nums);
            quick(mid + 1,r,nums);
        }
    }
    int partion(int l,int r,vector<int>&nums){ 
   
        int key = nums[l];
        while(l < r){ 
   
            while(l < r && nums[r] > key)r --;
            if(l < r)nums[l ++] = nums[r];
            while(l < r && nums[l] < key)l ++;
            if(l < r)nums[r --] = nums[l];
        }
        nums[l] = key;
        return l;
    }
    void sortColors(vector<int>& nums) { 
   
        int l = 0,r = nums.size() - 1;
        quick(l,r,nums);
    }
};
  1. 因为只有3组数字,最左边有一组,最右边有一组,中间有一组,所以把最左边和最右边都规整后,中间自然就规整,所以设置i,j代表左边放置0的下边,j为右边放置2的下标.

时间复杂度O(n)

class Solution { 
   
public:
    void sortColors(vector<int>& nums) { 
   
        int i = 0,n = nums.size(),j = nums.size() - 1;
        while(i < n && nums[i] == 0)i ++;
        while(j >= 0 && nums[j] == 2)j --;
        for(int k = i;k <= j;k ++){ 
   
            if(nums[k] == 0)swap(nums[i],nums[k]),i ++;
            else if(nums[k] == 2)swap(nums[j],nums[k]),k --,j --;   //注意当从后面换回去的时候可能回把后面的0换到前面
        }
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169157.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js弹出确认取消对话框_vs点击按钮弹出对话框

    js弹出确认取消对话框_vs点击按钮弹出对话框if(window.confirm(‘你确定要执行删除操作吗?’)){alert(“您点击了确定”);}else{alert(“您点击了取消”);returnfalse;}

    2025年7月27日
    4
  • spidermonkey学习

    spidermonkey学习JavaScript在浏览器中的应用几乎是尽人皆知的。实际上,JavaScript技术也可以使用在非浏览器应用程序当中,从而让应用程序具有自动的脚本功能。本文介绍了一种功能非常强大的JavaScript引擎SpiderMonkey。这个引擎是Mozilla浏览器的JavaScript引擎。该引擎接口定义清晰,模块化好。本文简要介绍了SpiderMonkey的基本结构,并讲解了如何在自己的应用

    2022年10月16日
    3
  • yuicompressor压缩js的ant脚本

    yuicompressor压缩js的ant脚本&lt;?xmlversion="1.0"encoding="UTF-8"?&gt; &lt;!–对指定目录下的所有js进行压缩,放入指定位置–&gt; &lt;projectname="jsbuild"default="build"&gt;    &lt;propertyname="web.dir"location=&quo

    2022年7月18日
    14
  • 绘制UML各种图详解「建议收藏」

    绘制UML各种图详解「建议收藏」来源:http://blog.csdn.net/shift_wwx/article/details/79205187一、前言在软件开发过程中会经常整理文档,不是所有的信息都可以通过文字来表达,而换成图之后会更加的直观、有效,其中频繁使用的就是UML图。结合自己实践总结一下,希望对大家都能有所帮助。本文中的UML图都是用visio绘制,sourcecode展示是Ja…

    2022年8月13日
    7
  • 利用Pycharm连接服务器[通俗易懂]

    利用Pycharm连接服务器[通俗易懂]利用Pycharm连接服务器前言当下,很多深度学习的模型需要高配置的设备来跑,本地的pc可能无法满足要求。所以就需要利用服务器来训练,但是在服务器上操作代码不是很方便。利用Pycharm可以在本地编写/修改代码,能够同步到服务器上,并且能直接在本地利用pycharm运行同步到服务器上的代码。非常的方便。-前提一台装有anaconda的服务器,本地装了专业版的pycharm。操作步骤步骤一:在pycharm上使用服务器的python环境用pycharm任意打开一个项目,从工具栏中选择Fil

    2022年8月29日
    4
  • DFS(深度优先搜索算法)「建议收藏」

    DFS(深度优先搜索算法)「建议收藏」基本概念深度优先搜索算法(DepthFirstSearch,简称DFS):一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。算法思想回溯法(探索与回溯法…

    2022年6月18日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号