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

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

目录

一、题目介绍

二、双指针原理

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

Ubuntu 24.04 安装搜狗输入法完整教程

摘要 Ubuntu 24.04默认使用Fcitx5和Wayland,与搜狗输入法的Fcitx4框架存在兼容性问题。本教程通过降级到Fcitx4、切换到Xorg显示服务器、安装必要依赖等步骤,解决安装冲突和显示异常问题。经实际验证,可成功在Ubuntu 24.04上稳定运行搜狗输入法。 前言 Ubuntu 24.04 LTS 作为最新的长期支持版本,默认使用 Fcitx5 输入法框架,而搜狗输入法目前仍然基于 Fcitx4 框架。本教程将详细介绍如何在 Ubuntu 24.04 上成功安装搜狗输入法,并解决常见的兼容性问题。 环境说明 * 系统版本:Ubuntu 24.04 LTS * 搜狗输入法版本:sogoupinyin_4.2.1.145_amd64.deb * 输入法框架:Fcitx4(需要从 Fcitx5 降级)

By Ne0inhk
[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

🔥🔥🔥本篇笔记所对应的视频:🚀颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发MCP服务_哔哩哔哩_bilibili Open WebUI 的 MCPo 项目:将 MCP 工具无缝集成到 OpenAPI 的创新解决方案 随着人工智能工具和模型的快速发展,如何高效、安全地将这些工具集成到标准化的 API 接口中成为了开发者面临的重要挑战。Open WebUI 的 MCPo 项目(Model Context Protocol-to-OpenAPI Proxy Server)正是为了解决这一问题而设计的。本文将带您深入了解 MCPo 的功能、优势及其对开发者生态的影响。 什么是 MCPo? MCPo 是一个简单、可靠的代理服务器,能够将任何基于 MCP 协议的工具转换为兼容

By Ne0inhk
Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

系列文章目录 一、Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一) 二、Qwen3+Qwen Agent +MCP智能体开发实战(二)—10分钟打造"MiniManus" 前言 要说最近人工智能界最火热的开源大模型,必定是阿里发布不久的Qwen3系列模型。Qwen3模型凭借赶超DeepSeek-V3/R1的优异性能,创新的混合推理模式,以及极强的MCP能力迅速成为AI Agent开发的主流基座模型。大家可参考我的文章一文解析Qwen3大模型详细了解Qwen3模型的核心能力。有读者私信我: “Qwen3官网特地强调增强了Agent和代码能力,同时加强了对MCP的支持,那么我该如何利用Qwen3快速开发MCP应用呢?” 这就就需要使用我们今天的主角——Qwen官方推荐的开发工具Qwen-Agent ,本期分享我们就一起学习快速使用Qwen3+QwenAgent 接入MCP服务端,快速开发AI Agent应用! 一、注册 Qwen3 API-Key 本次分享通过阿里云百炼大模型服务平台API Key请求方式调用Qwen3大模型,获取服务平台

By Ne0inhk