《算法面试“必杀技”:双指针法高效解决数组原地操作》

《算法面试“必杀技”:双指针法高效解决数组原地操作》

🔥@晨非辰Tong:个人主页 

👀专栏:《C语言》《数据结构与算法》

💪学习阶段:C语言、数据结构与算法初学者

⏳“人理解迭代,神理解递归。”


引言:告别盲目刷题。学完顺序表后,集中攻克「删除有序数组重复项」、「移除元素」、「合并有序数组」这三道题,你将能一举掌握解决一大类数组问题的双指针技巧。

目录

 1.  力扣_26. 删除有序数组中的重复项(双“指针”法)

 2.  力扣_27. 移除元素(双“指针”法)

3.  88. 合并两个有序数组 - 力扣(LeetCode)


 1.  26. 删除有序数组中的重复项- 力扣(LeetCode)(双“指针”法)

--本题采用的方法为经典的双“指针”法(不是真的两个指针,只是两个变量的指向作用充当“指针”),此方法在以后的学习中经常会使用到。

--在结合前面所学的时间复杂度、空间复杂度舍弃了另外一种普遍、容易想到办法——>创建临时数组,将符合的元素拷贝到临时数组中,再进行数组值间的拷贝。
int removeDuplicates(int* nums, int numsSize) { //定义两个“指针” int label1 = 1, label2 = 0; while(label1 < numsSize) { //匹配 if(nums[label2] == nums[label1]) { label1++; } //不匹配 else { //判断label之间的距离 // <= 1 if((label1 - label2) <= 1) { label1++; label2++; } //>1 else { label2++; nums[label2] = nums[label1]; label1++; } } } return label2 + 1; }
--本题的解题参照为示例2(相较于示例1,涉及到的情况更加复杂,易考虑全面)。使用两个标记点来遍历数组,第一个标记点指向当前不重复数字的最后一个位置,第二个标记点负责在前面寻找新的不重复数字。初始化两个标记点:label2从0开始,label1从1开始。让label1逐个检查数组中的每个数字,当label1发现与label2不同的数字时:如果两个标记点相邻,就一起向前移动如果两个标记点不相邻,先把label2向前移动一位,再把label1的数字复制过来重复这个过程直到label1遍历完整个数组最终返回label2+1作为新数组的长度

 2.  27. 移除元素- 力扣(LeetCode)(双“指针”法)

--方法:双“指针”法

--本道题的解法仍旧使用双“指针”法。

--在结合前面所学的时间复杂度、空间复杂度舍弃了另外一种普遍、容易想到办法——>创建临时数组,将符合的元素拷贝到临时数组中,再进行数组值间的拷贝。
int removeElement(int* nums, int numsSize, int val) { int src = 0, dst = 0; while(src < numsSize) { src是val,src++ if(nums[src] == val) { src++; } src非val,赋值,整体++ else { nums[dst] = nums[src]; dst++; src++; } } return dst; }
//优化 int removeElement(int* nums, int numsSize, int val) { int src = 0, dst = 0; while(src < numsSize) { if(nums[src] != val) { nums[dst] = nums[src]; dst++; } src++; } return dst; }

示例一:要求k=2,两个非val值

--开头 src、dst 都在数组第一个元素,恰好 src = val(3),那么 src++(dst 不动,指向val值)。src = 2(非val),那么 nums[dst] = nums[src](2覆盖3),整体++。src = 2(非 val,dst指向空),src再++(dst不动)……最后src超过numsSize(循环终止条件),dst 指向nums[2]——>dst=2(要求返回的k值)。

3.  88. 合并两个有序数组 - 力扣(LeetCode)

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { int l1 = m - 1; int l2 = n - 1; int l3 = m + n -1; while(l1 >= 0 && l2 >= 0) { //比较l1、l2谁数值大 if(nums1[l1] > nums2[l2]) { nums1[l3--] = nums1[l1--]; } else { nums1[l3--] = nums2[l2--]; } } //l1访问越界(l2没有越界,进行特殊的处理) while(l2 >= 0) { nums1[l3--] = nums2[l2--]; } //l2越界(不处理) //l1、l2同时越界(不存在) }

回顾:

《面试高频数据结构:单链表与顺序表之争,读懂“不连续”之美背后的算法思想》

【数据结构与算法】实战:暴力解VS最优解——一道轮转数组题引发的复杂度「血案」
结语:至此,我们不仅解决了三道题,更学会了如何用「双指针」维护数组的有效区间——这一思维,将是你在算法世界中探索的宝贵财富。

Read more

AI实践(7)工具函数调用

AI实践(7)工具函数调用

AI实践(8)工具函数调用 Author: Once Day Date: 2026年3月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: AI实践成长_Once-Day的博客-ZEEKLOG博客 参考文章:Prompt Engineering Guide提示词技巧 – Claude 中文 - Claude AI 开发技术社区Prompting strategies for financial analysis | ClaudeDocumentation - Claude API DocsOpenAI for developers在LLM中调用函数 | Prompt Engineering GuideAI大模型Function Call技术教程:从入门到精通-ZEEKLOG博客详解 OpenAI 函数调用(Function Calling):让模型具备数据获取与行动能力 - 大A就是我 -

By Ne0inhk
AI 办公成职场标配,别再用错拖后腿!7 套书教你精准用 AI 提效

AI 办公成职场标配,别再用错拖后腿!7 套书教你精准用 AI 提效

2026三掌柜赠书活动第十八期 AI 办公成职场标配,别再用错拖后腿!7 套书教你精准用 AI 提效 目录 Part.0 前言 Part.1 开会汇报没重点?AI当“嘴替” Part.2 不想加班,还不知道搭个智能体帮你干? Part.3 主业涨薪难,想抓AI风口做副业? Part.4 DeepSeek总get不到你的点? Part.5 Office内置AI不会用? Part.6 不想被“职场体力活”耗空? Part.7 对抗工具墒增,实现职场进阶! Part.8 彩蛋:赠书! Part.9 结束语 Part.0 前言

By Ne0inhk
一个后台管理所有 AI:手把手教你搭建属于自己的 AI 中转站(CLIProxyAPI版)

一个后台管理所有 AI:手把手教你搭建属于自己的 AI 中转站(CLIProxyAPI版)

目录 * 前言 * 第一部分:基础设施准备与 CLIProxyAPI 的核心部署 * 1.1 服务器选型与环境初始化 * 1.2 CLIProxyAPI 的自动化安装 * 1.3 核心配置文件 `config.yaml` 的深度定制 * 第二部分:系统服务化管理与故障排查 * 2.1 初始启动尝试与 Systemd 服务注册 * 2.2 服务启动失败的深度分析与路径修正 * 2.3 修正 Systemd 配置与服务恢复 * 第三部分:Web 管理界面的访问与 OAuth 认证集成 * 3.1 网络防火墙配置 * 3.2 仪表盘登录与功能概览 * 3.3 Google OAuth 认证流程

By Ne0inhk
UnityMCP+Claude+VSCode,构建最强AI游戏开发环境

UnityMCP+Claude+VSCode,构建最强AI游戏开发环境

* 前言 * 一、UnityMCP+Claude+VSCode,构建最强AI 游戏开发环境 * 1.1 介绍 * 1.2 使用说明及下载 * 二、VSCode配置 * 2.1 连接UnityMCP * 2.2 在VSCode中添加插件 * 2.3 Claude安装 * 2.4 VSCode MCP配置 * 2.5 使用Claude开发功能 * 三、相关问题 * 总结 前言 * 本篇文章来介绍使用 UnityMCP+Claude+VSCode,打造一个更智能、高效的游戏开发工作流。 * 借助MCP工具,Claude可以直接与Unity编辑器进行双向指令交互,开发者则可以直接使用自然语言进行Unity游戏开发。 * 这一组合充分利用了AI的代码生成、问题诊断与创意辅助能力,极大提升了Unity项目的开发效率与质量。 一、UnityMCP+Claude+

By Ne0inhk