当前位置: 首页 > article >正文

leetcode 75.颜色分类

思路:荷兰国旗问题

这道题和这个经典问题是同一个问题。

其实就是00,11,22这中间两个逗号就是划分线,刚开始的时候,线在数组的两端。

可以观察看到,第一个逗号的左边是0,第二个逗号的右边是2,也就是说,第一个划分线的左边必须全是0才行;第二个划分线的右边必须全是2才行。

所以这样就可以下个结论:我们可以用双指针的做法,把这些数回归到它们该回归的地方去。

因此,会有三个变量l,r,i。最后一个变量表示当前遍历元素的变量下标。

当nums[i]==0的时候,我们就把它和左指指向的元素交换,然后我们再让左指针向前移,然后i变量也向前移;

当nums[i]==2的时候,我们就把它和右指针指向的元素进行交换,然后我们再让右指针向后移动,这个时候注意,i是不会发生变化的,因为i必须在l和r中间,并且,当右指针变化的时候i不用变化的原因就是:这个时候交换了的元素我们还没有遍历到,我们需要再次遍历这个位置上的元素,判断它的值是多少。

之后以此类推,当i超出了r边界的时候,我们就停止即可。

class Solution {
    public void sortColors(int[] nums) {
        int l=0;
        int r=nums.length-1;
        int i=0;
        while(i<=r){
            if(nums[i]==0){
                int tmp=0;
                tmp=nums[i];
                nums[i]=nums[l];
                nums[l]=tmp;
                l++;
                i++;
            }
            else if(nums[i]==2){
                int tmp=0;
                tmp=nums[i];
                nums[i]=nums[r];
                nums[r]=tmp;
                r--;
            }
            else{
                i++;
            }
        }
    }
}


http://www.kler.cn/a/382020.html

相关文章:

  • 华为ensp--BGP路由反射器
  • Windows 11 安装 Dify 完整指南 非docker环境
  • vue3入门教程:ref函数
  • 怎么设置电脑密码?Windows和Mac设置密码的方法
  • 视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点
  • systemverilog中task的disable用法
  • Python的struct打包通讯数据头文件
  • 杨辉三角——c语言
  • 浏览器内核版本更新:Chrome 130✔
  • 【MySQL】函数
  • 网络安全求职指南_看完这篇就足够了~
  • c++设计模式demo
  • 【Linux】Linux安全与密钥登录指南
  • 工作管理实战指南:利用Jira、Confluence等Atlassian工具打破信息孤岛,增强团队协作【含免费指南】
  • 算法学习(十)—— 字符串
  • Oracle 第15章:安全性管理
  • 基于python主观题自动阅卷系统毕业设计项目
  • 计算机网络:网络层 —— 虚拟专用网 VPN
  • [C++从小白到大牛]第三篇:3分钟带你入门C++(下)
  • 苍穹外卖day-01
  • java 正则匹配json中占位符
  • 7.qsqlquerymodel 与 qtableview使用
  • HBuilderx修改主题色-改变编辑器背景颜色等
  • 【AI换装整合包及教程】OOTDiffusion: AI换装工具的革命性创新
  • 浅谈QT中Tab键的切换逻辑
  • C++工厂模式全解析:从简单工厂到抽象工厂的进阶之路