【面试算法笔记】0102-数组-移除元素 相关 个人主页https://github.com/zbhgis前言本系列主要记录自己学习算法的过程中的感悟。力扣27.移除元素链接https://leetcode.cn/problems/remove-element/description/注意点快慢指针做法。这道题的题目关键在于如何原地操作数组。1.设计两个指针一快一慢。2.当快指针移动至需要保留元素的位置就将nums[slow]赋值为nums[fast]同时slow跟着fast继续前进。这样子就能保证slow操作之后能保留需要的元素。3.当快指针移动至需要移除元素的位置就直接跳过进入下一次循环此时slow还是停留原地这样子就等于移除了元素。4.总的来说就是分为保留元素和移除元素这两步之后如果题目变成了保留元素那么其实解法就类似代码class Solution { public int search(int[] nums, int target) { if (target nums[0] || target nums[nums.length - 1]) { return -1; } int left 0; int right nums.length - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { return mid; } else if (nums[mid] target) { left mid 1; } else { right mid - 1; } } return -1; } }时空复杂度分析fast指针得遍历完整个数组所以时间复杂度为O(n)直接在原始数组上修改空间复杂度为O(1)力扣26. 删除有序数组中的重复项链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/注意点快慢指针做法。这道题的题目关键在于如何原地操作数组。1.设计两个指针一快一慢。2.与上一题类似不过这一次需要判断是否与前面的元素重复如果不重复就移动slow并赋值nums[slow]为nums[fast]最后返回3.总的来说就是也是通过指针来保留不重复的值。代码class Solution { public int removeDuplicates(int[] nums) { int slow 0; for (int fast 0; fast nums.length; fast ) { if(nums[fast] ! nums[slow]) { slow ; nums[slow] nums[fast]; } } return slow 1; } }时空复杂度分析同上力扣283. 移动零链接https://leetcode.cn/problems/move-zeroes/description/注意点快慢指针做法。这道题的题目关键在于如何原地操作数组。1.设计两个指针一快一慢。2.与上一题类似不过这一次需要判断是否为零不为零的话就交换nums[fast]和nums[slow]相当于把零一直往后边送。代码class Solution { public void moveZeroes(int[] nums) { int slow 0; for (int fast 0; fast nums.length; fast ) { if (nums[fast] ! 0) { int tmp nums[fast]; nums[fast] nums[slow]; nums[slow ] tmp; } } } }时空复杂度分析同上力扣844. 比较含退格的字符串链接https://leetcode.cn/problems/backspace-string-compare/description/注意点快慢指针做法。这道题的题目关键在于如何原地操作数组。1.设计两个指针一快一慢。2.在操作之前先将字符串转为字符数组才能遍历。3.与上一题类似不过这一次fast没碰到退格字符的时候需要将chars[fast]赋值给chars[slow]slow一起跟着fast移动。如果碰到退格字符说明这个字符需要保留就需要将slow回退一个相当于删除了一个字符的操作。所以循环结束之后区间[0,slow]相当于实际的数组。代码class Solution { public boolean backspaceCompare(String s, String t) { return process(t).equals(process(s)); } private String process(String str) { int slow 0; char[] chars str.toCharArray(); for (int fast 0; fast chars.length; fast ) { if (chars[fast] ! #) { chars[slow] chars[fast]; slow ; } else { slow slow 0 ? -- slow : 0; } } return new String(chars, 0, slow); } }时空复杂度分析同上

相关新闻

最新新闻

基于Python智能表单识别系统的设计与实现大数据深度学习|计算机毕设项目|计算机毕设答辩|

基于Python智能表单识别系统的设计与实现大数据深度学习|计算机毕设项目|计算机毕设答辩|

一、项目介绍 基于深度学习的表格识别技术通过神经网络模型显著提升了复杂表格的处理能力。传统方法依赖OCR技术,难以应对合并单元格、无线表格等复杂结构,且准确率受限。深度学习技术结合卷积神经网络(CNN)、图卷积网络及注意力机…

2026/8/31 20:45:51
2026知网AIGC检测红黑榜:这些能过这些别碰

2026知网AIGC检测红黑榜:这些能过这些别碰

毕业季一到,知网AIGC检测就成了论文能不能送审的第一道关口。系统更新后不少学生发现,自己辛苦写的稿子因为AI痕迹过重被打回,更麻烦的是市面上号称能降AI的工具鱼龙混杂,选错了不仅白花钱,还可能让论文越改越糟。这篇…

2026/8/31 20:45:51
LangChain与LangGraph实战:Agent+RAG企业级应用开发主线

LangChain与LangGraph实战:Agent+RAG企业级应用开发主线

最近经常被问到一个问题:LangChain 到底还值不值得学?LangGraph 是来替代 LangChain 的吗?企业做知识库问答、Agent 自动化,到底应该先学什么?这些问题的答案其实指向同一条主线:LangChain 负责组件生态&am…

2026/8/31 20:45:51
AI智能体预算管理实战:避免任务执行中预算耗尽的工程策略

AI智能体预算管理实战:避免任务执行中预算耗尽的工程策略

1. 这篇文章真正要解决的问题过去半年,明显感觉到一个现象:越来越多团队开始用 AI 智能体跑真实业务,但真正把智能体推到生产环境的人,几乎都遇到过同一个尴尬时刻——任务执行到一半,预算没了。这里的“预算”不一定指…

2026/8/31 20:45:51
论认知霸权的建制化异化、算法驯化与真理回归——基于“逻辑第一序位”与“第一动作”判定法的批判性知识社会学研究

论认知霸权的建制化异化、算法驯化与真理回归——基于“逻辑第一序位”与“第一动作”判定法的批判性知识社会学研究

核心内容摘要这篇文章的核心内容体系与核心观点梳理:一、文章核心批判对象这篇研究从知识社会学与批判哲学的视角,系统性解构了当代三类建制化的认知霸权体系:‌证伪主义的元命题悖论‌:指出波普尔提出的“可证伪的才是科学”这一…

2026/8/31 20:45:51
Hypermesh入门指南:从几何清理到网格划分的前处理全流程

Hypermesh入门指南:从几何清理到网格划分的前处理全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/8/31 20:40:50