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

株洲做网站建设移动网站如何优化排名

株洲做网站建设,移动网站如何优化排名,网站建设公司 未来,广州天河网站制作1. 题目链接 LeetCode 75. 颜色分类 2. 题目描述 给定一个包含红色(0)、白色(1)和蓝色(2)的数组 nums,要求原地对数组进行排序,使得相同颜色的元素相邻,且按红、白、蓝…
1. 题目链接

LeetCode 75. 颜色分类


2. 题目描述

给定一个包含红色(0)、白色(1)和蓝色(2)的数组 nums,要求原地对数组进行排序,使得相同颜色的元素相邻,且按红、白、蓝顺序排列。
要求

  • 仅使用常数空间。
  • 仅遍历数组一次。

示例

  • 输入:nums = [2,0,2,1,1,0] → 输出:[0,0,1,1,2,2]
  • 输入:nums = [2,2,1,0] → 输出:[0,1,2,2]

3. 示例分析
  1. 常规案例
    • 输入:[2,0,2,1,1,0]
      • 通过交换将 0 移动到左侧,2 移动到右侧,中间保留 1
      • 最终结果:[0,0,1,1,2,2]
  2. 边界案例
    • 输入全为 0[0,0,0] → 无需操作,直接返回。
    • 输入全为 2[2,2,2] → 所有元素交换到右侧。
    • 输入全为 1[1,1,1] → 无需操作。

4. 算法思路

核心思想三指针法

  1. 指针定义
    • left:指向已处理 0 的右边界(初始为 -1)。
    • right:指向已处理 2 的左边界(初始为 n)。
    • i:遍历指针,从 0 开始。
  2. 遍历规则
    • nums[i] == 0
      • 交换 nums[++left]nums[i]i++
      • 0 移动到 left 右侧,扩展 0 的区域。
    • nums[i] == 1
      • i++
      • 1 保留在中间区域,无需处理。
    • nums[i] == 2
      • 交换 nums[--right]nums[i]
      • 2 移动到 right 左侧,扩展 2 的区域。
      • 不移动 i:交换后的 nums[i] 可能是 01,需再次检查。
  3. 终止条件
    • i >= right 时,所有元素已处理完毕。

5. 边界条件与注意事项
  1. 0/1/2 数组
    • 01:遍历后指针无需移动,直接返回。
    • 2i 不移动,通过交换将所有元素移动到右侧。
  2. 单元素数组
    • 无需操作,直接返回。
  3. 元素交换顺序
    • 交换 2 时,i 不自增,确保新元素被检查。
  4. 时间复杂度
    • 每个元素最多被交换两次,时间复杂度为 O(n)

6. 代码实现
class Solution {
public:void sortColors(vector<int>& nums) {int n = nums.size();int left = -1, right = n, i = 0;while (i < right) {if (nums[i] == 0) {swap(nums[++left], nums[i++]); // 交换0到左区,i前进} else if (nums[i] == 1) {i++; // 保留中间区} else {swap(nums[--right], nums[i]); // 交换2到右区,i不前进}}}
};

在这里插入图片描述


关键步骤解析

  1. 初始化指针

    int left = -1, right = n, i = 0;
    
    • left 初始指向 0 区的左边界(无元素),right 指向 2 区的右边界。
  2. 处理 0 的逻辑

    swap(nums[++left], nums[i++]);
    
    • left 向右扩展,将 0 交换到 0 区末尾,i 前进。
  3. 处理 2 的逻辑

    swap(nums[--right], nums[i]);
    
    • right 向左扩展,将 2 交换到 2 区头部,i 不前进

与其他解法的对比

方法时间复杂度空间复杂度核心思想
三指针法O(n)O(1)分区交换,一次遍历
计数排序法O(n)O(1)统计频次,重新填充数组
双指针法O(n)O(1)两次遍历,先排0再排1

总结

三指针法通过一次遍历实现原地排序,是解决荷兰国旗问题的经典方案。其核心在于 分区处理指针动态调整,以线性时间高效完成排序。

优化点

  • 合并部分条件判断,减少代码行数。
  • 预判全 1 情况,提前终止遍历。

适用场景

  • 需要严格满足“一次遍历”和“常数空间”要求的场景。
  • 大规模数据排序(n ≤ 1e5)。

关键点

  • 理解 iright 的协作逻辑。
  • 处理 02 时的指针移动差异。
http://www.cadmedia.cn/news/2755.html

相关文章:

  • 宁波专业的网站建设西安网络推广营销公司
  • 高校招生网站建设如何搜索关键词热度
  • 沈阳做网站最好的公司有哪些嘉兴百度快照优化排名
  • 网站可以做多少事情seo上首页
  • 平面设计最新招聘信息太原百度快速优化排名
  • 云南省建设厅招标办网站站外推广怎么做
  • 中国最大网站建设商阿里云免费域名
  • 三亚人才招聘网站百度高级搜索入口
  • 做网站是自己公司做好还是外包好免费建站系统官网
  • 网页设计尺寸用怎么量广州网络优化最早的公司
  • 深圳企业建站高性价比的选择广州推广工具
  • 网站如何做免费推广自媒体运营主要做什么
  • 佟年为韩商言做的网站2023年6月份又封城了
  • 人力招聘网站建设任务执行书搜索引擎优化英文简称
  • 网站推广运营招聘企业营销型网站
  • 旅游网站建设水平评价宁波seo公司排名榜
  • dedecms微电影网站模板今天的国内新闻
  • 内乡微网站建设怎么申请网站空间
  • 建设制作网站国外搜索引擎排行榜
  • 广东建设安全质量协会网站东莞营销网站建设
  • 翻译网站建设b站引流推广
  • 固始县住房和城乡建设局网站seocms
  • 企业设计网站公司有哪些怎么看app的下载网址
  • 网站建设流程seo标题优化分析范文
  • 大型餐饮网站建设网站域名注册
  • 德宏商城网站建设知识营销成功案例介绍
  • 网站建设国风网络公司厦门人才网唯一官网登录
  • 常州个人网站建设西安百度推广开户运营
  • 网站建设 生产百度小程序排名优化
  • 企业网盘怎么上传文件seo网络优化专员