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

什么叫网站外链如何做企业组织架构图

什么叫网站外链,如何做企业组织架构图,泉州网页建站模板,电子商务专业网站设计Problem: 75. 颜色分类 文章目录整体思路完整代码时空复杂度时间复杂度:O(N)空间复杂度:O(1)整体思路 这段代码旨在解决经典的 “颜色分类” (Sort Colors) 问题,也常被称为 “荷兰国旗问题” (Dutch National Flag problem)。问题要求对一个…

Problem: 75. 颜色分类

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(N)
    • 空间复杂度:O(1)

整体思路

这段代码旨在解决经典的 “颜色分类” (Sort Colors) 问题,也常被称为 “荷兰国旗问题” (Dutch National Flag problem)。问题要求对一个包含 0(红色)、1(白色)、2(蓝色)三种元素的数组进行原地排序,使得所有相同的元素相邻,并按 0、1、2 的顺序排列。

该算法采用了一种非常精妙的 单次遍历、双指针 的原地排序策略。它通过一次遍历,同时维护 0 的区域和 1 的区域的边界,巧妙地将遇到的 0 和 1 “交换”到数组的前部。

算法的核心逻辑可以分解为以下步骤:

  1. 指针定义

    • 算法使用两个指针,loc0loc1,来追踪已排序区域的边界。
    • loc0:表示下一个 0 应该被放置的位置。换句话说,[0, loc0-1] 区域内保证全部是 0。
    • loc1:表示下一个 1 应该被放置的位置。换句话说,[0, loc1-1] 区域内保证全部是 0 或 1。
    • 一个隐形的第三区域是由遍历指针 i 构成的,可以认为 [loc1, i-1] 区域在任何时刻都填充的是 2。
  2. 单次遍历与“覆盖”逻辑

    • 算法通过一个 for 循环,从左到右遍历整个数组。对于遇到的每个数字 nums[i],它执行一个非常巧妙的“先写后改”的覆盖操作。
    • 关键步骤 nums[i] = 2;:在读取 nums[i] 的值存入 temp后,算法立即将 nums[i] 的位置用 2 覆盖。这可以理解为:我们把当前位置 i “清空”并暂时标记为 2,因为我们即将把 temp 的值(如果是0或1)移动到它在数组前面应在的正确位置。
    • 处理 0 和 1 (if (temp <= 1)):如果原始数字 temp 是 0 或 1,它就不应该留在当前这个可能是“2”的区域。它至少应该是一个 1。因此,算法在 loc1 的位置写入一个 1,并将 loc1 指针右移。
    • 处理 0 (if (temp == 0)):如果原始数字 temp 是 0,它不仅需要被移到前面,还必须被移到 loc0 的位置。因此,算法在 loc0 的位置写入一个 0,并将 loc0 指针右移。
    • 巧妙的覆盖:注意,当 temp 为 0 时,会先执行 nums[loc1++] = 1,然后执行 nums[loc0++] = 0。因为 loc0 <= loc1 恒成立,所以后一步的 nums[loc0] = 0覆盖掉前一步在 loc0 位置写入的 1。这正是算法的精髓所在:当一个 0 被发现时,它占据了 loc0 的位置,而原本可能在这里的 1 被有效地“推”到了后面 1 的区域的开头,即 loc1 的位置。
  3. 最终状态

    • for 循环结束后,loc0loc1 已经正确地将数组划分为了三部分:[0, loc0-1] 全是 0,[loc0, loc1-1] 全是 1,[loc1, n-1] 全是 2。

完整代码

class Solution {/*** 对包含 0, 1, 2 三种元素的数组进行原地排序。* @param nums 整数数组*/public void sortColors(int[] nums) {// loc0: 指向下一个 0 应该被放置的位置。int loc0 = 0;// loc1: 指向下一个 1 应该被放置的位置。int loc1 = 0;// 单次遍历整个数组for (int i = 0; i < nums.length; i++) {// 1. 保存当前位置的原始值int temp = nums[i];// 2. 关键步骤:先用 2 覆盖当前位置。//    这相当于把当前位置 i 暂时归入 "2" 的区域,//    为即将被前移的 0 或 1 腾出空间。nums[i] = 2;// 3. 如果原始值是 0 或 1,它需要被移动到前面。//    我们先在 loc1 位置放置一个 1,并将 loc1 右移。//    这确保了 [0, loc1-1] 区域至少是 0 或 1。if (temp <= 1) {nums[loc1++] = 1;}// 4. 如果原始值是 0,它需要被移动到更前面。//    我们在 loc0 位置放置一个 0,并将 loc0 右移。//    如果 temp 是 0,这一步会覆盖掉上一步在 loc0 位置放置的 1。//    这是正确的,因为 0 的优先级更高,而 1 被有效地“推”到了 1 的区域。if (temp == 0) {nums[loc0++] = 0;}}}
}

时空复杂度

时间复杂度:O(N)

  1. 循环:算法的核心是一个 for 循环,它从 i = 0 遍历到 nums.length - 1。这个循环严格地执行 N 次,其中 N 是数组的长度。
  2. 循环内部操作
    • 在循环的每一次迭代中,执行的都是固定数量的操作:一次数组读,最多三次数组写,几次比较和指针增量。
    • 这些操作的时间复杂度都是 O(1)

综合分析
算法由 N 次 O(1) 的操作组成。因此,总的时间复杂度是 N * O(1) = O(N)

空间复杂度:O(1)

  1. 主要存储开销:该算法没有创建任何与输入规模 N 成比例的新的数据结构(如辅助数组)。
  2. 辅助变量:只使用了 loc0, loc1, i, temp 等几个固定数量的整型变量。

综合分析
算法是在原数组上进行修改的(in-place),所需的额外辅助空间是常数级别的。因此,其空间复杂度为 O(1)

参考灵神

http://www.dtcms.com/a/521122.html

相关文章:

  • 网页与网站设计工作内容wordpress的登陆地址修改
  • 为什么在数据库表中存储的数字是20.02,但是在前端读取的时候就会呈现20.0200000000000
  • 手机网站的文本排版是怎么做的百度一下就知道官网
  • XSS漏洞攻击 (跨站脚本攻击)
  • 龙之向导外贸经理人网站云南省住房和城乡建设局网站
  • 高端品牌网站建设九五网络家居网站模板
  • 第16章:Spring AI Alibaba Graph框架— 人类反馈
  • 大连网站制作推广免费送网站
  • 泰州城乡建设局网站电子商务网站建设利益分析
  • CORDIC三角计算技术
  • Miniconda介绍与安装
  • 服务器硬件设备都有哪些?
  • 中山市建设局网站窗口电话号码wordpress时间轴插件
  • JS逆向 - spiderdemo T6题(JSVMP喵喵盾、protobuf、css)纯算
  • 做怎样的企业网站480元做网站
  • 佛山做外贸网站开发一个电商网站
  • 我的世界做mc壁纸的网站网站建设背景是什么
  • MySQL Galera Cluster部署如何实现负载均衡和高可用
  • 唐山哪个公司做网站wordpress 新增页面
  • Cursor:GIT版本控制
  • 怎么把服务器做网站优秀网站设计 pdf
  • express框架 获取请求体数据
  • 用Python轻松提取视频音频并去除静音片段
  • 常德网站公司百度快速排名软件原理
  • 在blender中安装vtk插件
  • 河南做网站的费用做网站需要准备什么资料
  • 我国成功研制新型芯片:以更贴近人类直觉的计算方式,显著提升了计算效率并大幅降低能耗
  • 高级软考-系统架构设计师知识点3
  • 算法练习:前缀和专题
  • 网站建设与运营就业品牌推广与传播方案