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

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

目录

一、题目介绍

二、双指针原理

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

【C++动态规划 最长公共子序列】1035. 不相交的线|1805

【C++动态规划 最长公共子序列】1035. 不相交的线|1805

本文涉及知识点 C++动态规划 LeetCode1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(非水平线)相交。 请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。 以这种方法绘制线条,并返回可以绘制的最大连线数。 示例 1: 输入:nums1 = [1,4,2], nums2 = [1,2,4] 输出:2 解释:可以画出两条不交叉的线,如上图所示。 但无法画出第三条不相交的直线,因为从 nums1[

By Ne0inhk
【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.二叉树深度 2.求先序排列

【算法通关指南:数据结构与算法篇】二叉树相关算法题:1.二叉树深度 2.求先序排列

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、二叉树深度 * 2.1题目 * 2.2 算法原理 * 2.3代码 * 二、 求先序排列 * 3.1题目 * 3.2 算法原理 * 3.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、二叉树深度 2.

By Ne0inhk

go语言:实现字符串是否是有效的电子邮件地址算法(附带源码)

一、项目背景详细介绍 在现代互联网系统中,电子邮件(Email)几乎是所有系统最基础的身份标识之一。无论是注册登录、找回密码、通知提醒、营销系统、企业OA系统,甚至微服务之间的消息通知,邮箱地址都扮演着重要角色。 典型应用场景包括: * 用户注册校验 * 找回密码 * 发送验证码 * 企业用户认证 * CRM系统数据录入 * 批量营销系统数据清洗 如果邮箱地址校验不严格,可能会带来: 1. 数据污染(无效邮箱存入数据库) 2. 邮件发送失败率高 3. 被恶意构造输入攻击 4. 邮件服务器压力增加 5. 安全风险(例如注入攻击) 因此,实现一个严谨、可扩展、可教学的邮箱校验工具,是非常有意义的。 二、项目需求详细介绍 2.1 基础需求 实现函数: func IsValidEmail(email string) bool

By Ne0inhk
Flutter 三方库 matrix 鸿蒙终端底层复杂超维数学算力适配突破:无缝植入极限级张量系统与密集线性代数矩阵运算推演算法,解锁端侧图形处理边界-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 matrix 鸿蒙终端底层复杂超维数学算力适配突破:无缝植入极限级张量系统与密集线性代数矩阵运算推演算法,解锁端侧图形处理边界-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 matrix 鸿蒙终端底层复杂超维数学算力适配突破:无缝植入极限级张量系统与密集线性代数矩阵运算推演算法,全面解锁端侧图形视觉处理边界并拔高数据分析算力上限 在图形学渲染、物理引擎模拟、复杂地理坐标转换以及端侧小型机器学习框架中,底层的矩阵运算(Matrix Operations)是决速步骤。matrix 库是一个专注于高性能线性代数计算的 Dart 库。本文将详解该库在 OpenHarmony 环境下的适配与实战应用。 封面 前言 什么是 matrix?它为 Dart 提供了一套类似于 NumPy 的多维数组运算接口。在鸿蒙操作系统这种强调极致流畅度和复杂视觉动效的系统中,利用高效的矩阵算法可以显著提升自定义 Canvas 绘图或实时传器数据处理的性能,避免因 Dart 层的低效循环导致的 UI 掉帧。 一、原理解析 1.1 基础概念 matrix 库核心基于

By Ne0inhk