【算法】双指针(一)-移动零

【算法】双指针(一)-移动零

目录

一、题目介绍

二、双指针原理

1.当前维护指针

1.1维护方向

(1)条件边界

三、三指针原理

应用

1.快速排序

2.快速选择找元素

2.1找第k大元素

2.2找等于k元素

四、提交代码


一、题目介绍

283. 移动零 - 力扣(LeetCode)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0]

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

二、双指针原理

扩容遍历指针当前维护指针从小维护到大1.当前维护指针1.1维护方向(1)条件边界

根据条件判搬新值 维护一个条件边界
一个动作区间 蓄意的始到末 截出后 开始重复
三、三指针原理

多一个指针 维护 另一侧来的是非判断两性质块中间第三块 就是 两剩性质的第三块中间第三块只能分好两剩的性质

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

给定一个包含红色、白色和蓝色、共 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 == nums.length1 <= n <= 300nums[i] 为 01 或 2应用

能实现 排块的基准排序

左块性质<基准元素中间第三块性质=基准元素右块性质>基准元素

无序的左小块
  排好的块等元素  无序的右大块1.快速排序

排好 块等元素 —> 快速排序

912. 排序数组 - 力扣(LeetCode)

排好 块等元素 —> 快速排序

给你一个整数数组 nums,请你将该数组升序排列。

你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。

示例 1:输入:nums = [5,2,3,1] 输出:[1,2,3,5] 解释:数组排序后,某些数字的位置没有改变(例如,2 和 3),而其他数字的位置发生了改变(例如,1 和 5)。

示例 2:输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 解释:请注意,nums 的值不一定唯一。

提示:1 <= nums.length <= 5 * 104-5 * 104 <= nums[i] <= 5 * 1042.快速选择找元素

排好 无序左小块块等元素无序右大块 —> 快速选择找元素全排好下 去找 至少有排序N*logN只排 三块式基准 下 去找 N2.1找第k大元素

215. 数组中的第K个最大元素 - 力扣(LeetCode)

 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:输入: [3,2,1,5,6,4], k = 2 输出: 5

示例 2:输入: [3,2,3,1,2,4,5,5,6], k = 4 输出: 4

提示:1 <= k <= nums.length <= 105-104 <= nums[i] <= 1042.2找前k小元素

LCR 159. 库存管理 III - 力扣(LeetCode)

仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限

示例 1:输入:stock = [2,5,7,4], cnt = 1 输出:[2]

示例 2:输入:stock = [0,2,3,6], cnt = 2 输出:[0,2] 或 [2,0]

提示:0 <= cnt <= stock.length <= 10000
0 <= stock[i] <= 10000

四、提交代码

public void moveZeroes(int[] nums) { int cur = 0; int dest = -1; // 维护 当前最后一个非0的 边界 while(cur < nums.length) { if(nums[cur] != 0) { int tmp; tmp = nums[++dest];//除最开始时外,就是0的 nums[dest] = nums[cur]; nums[cur] = tmp; // 左边搬过来的 cur已经扫描过的,不用再扫描++ } cur++; } }

Read more

Python 流程控制完全指南:条件语句 + 循环语句 + 实战案例(零基础入门)

Python 流程控制完全指南:条件语句 + 循环语句 + 实战案例(零基础入门)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 顺序语句:基础执行语句 * 二. 条件语句:实现 “如果… 否则…” 逻辑 * 2.1 核心语法格式 * 2.2 关键注意点 * 2.3 空语句 pass:占位符作用 * 2.4 练习题 * 三. 循环语句:实现 “重复执行” 逻辑 * 3.1 while 循环:条件满足就一直执行 * 3.2 for 循环:

By Ne0inhk
Python 入门超详细指南:环境搭建 + 核心优势 + 应用场景(零基础友好)

Python 入门超详细指南:环境搭建 + 核心优势 + 应用场景(零基础友好)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 先搞懂:计算机与编程的核心概念 * 1.1 什么是计算机? * 1.2 什么是编程? * 二. 认识 Python:起源、优势与应用场景 * 2.1 Python 的 “前世今生” * 2.2 Python 的优缺点以及应用场景大盘点 * 三. Python 的就业前景:理性看待 “钱景” * 四. 环境搭建:Python+PyCharm(一步到位) * 4.1 安装 Python

By Ne0inhk
【3月考】二级Python最新真题及满分代码合集(简单应用题部分)

【3月考】二级Python最新真题及满分代码合集(简单应用题部分)

本套试题内容适配2026年3月考试 文本结尾提供所有题目配套电子版及素材和答案 祝大家优秀拿下!!! 第1套题 【题目素材】 # 以下代码为提示框架# 请在...处使用一行或多行代码替换# 请在______处使用一行代码替换## 注意:提示框架代码可以任意修改,以完成程序功能为准 txt =input("请输入类型序列: ")... d ={}... ls =list(d.items()) ls.sort(key=lambda x:x[1], reverse=True)# 按照数量排序for k in ls:print("{}:{}".format(k[0], k[1])) 【参考代码】 # 以下代码为提示框架# 请在...处使用一行或多行代码替换# 请在______处使用一行代码替换#

By Ne0inhk
python+机器学习基于肺癌数据分析可视化与预测系统

python+机器学习基于肺癌数据分析可视化与预测系统

收藏关注不迷路!! 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 文章目录 * 详细视频演示 * 项目介绍 * 系统效果图 * 源码获取 详细视频演示 文章底部名片,联系我看更详细的演示视频 项目介绍 Python+机器学习肺癌数据分析可视化与预测系统介绍 一、系统概述 该系统以Python为核心开发语言,结合机器学习技术,针对肺癌数据构建了集数据预处理、特征工程、模型训练、评估优化及可视化展示于一体的完整解决方案。系统支持从医院电子病历、医学影像数据库、临床试验数据及公开医学数据集等多源采集数据,涵盖患者基本信息、临床症状、影像学特征、病理检查结果及治疗预后信息等。通过深度挖掘数据价值,系统旨在辅助医疗决策、疾病诊断及治疗效果评估,为肺癌的早期筛查、个性化治疗及预防提供科学依据。 二、系统功能模块 数据采集与预处理 数据采集:系统支持从多种数据源采集肺癌相关数据,确保数据的多样性和全面性。 数据清洗:处理缺失值、异常值和重复数据,采用

By Ne0inhk