news 2026/7/11 1:15:23

【面试算法笔记】0102-数组-移除元素 相关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【面试算法笔记】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); } }

时空复杂度分析

同上

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 1:14:59

欧氏空间与内积不是向量运算工具,是正交双螺旋之间投影匹配、对称度量的原生空间标尺 -《全域数学vs传统数学:人类文明进阶200讲》第74讲

作者&#xff1a; 乖乖数学 《全域数学vs传统数学&#xff1a;人类文明进阶200讲》第74讲 讲次&#xff1a; 第74讲 主题&#xff1a; 欧氏空间与内积不是向量运算工具&#xff0c;是正交双螺旋之间投影匹配、对称度量的原生空间标尺 对标课本知识点&#xff1a; 内积、范数、夹…

作者头像 李华
网站建设 2026/7/11 1:14:44

JTAG/SWD是什么

一、调试接口通用引脚1、JTAG/SWD接口引脚分布&#xff08;1&#xff09;JTAG和SWD是两种功能模式&#xff0c;它们的引脚是物理复用的。&#xff08;各类微控制器均支持JTAG&#xff0c;但只有ARM芯片支持SWD&#xff0c;SWD是ARM的专有协议&#xff09;&#xff08;2&#xf…

作者头像 李华
网站建设 2026/7/11 1:11:42

Simulink 电流滞环PWM逆变器仿真:环宽±0.2A下三相电流THD对比与参数调优

电流滞环PWM逆变器仿真&#xff1a;环宽对THD的影响与参数调优实战在电力电子系统设计中&#xff0c;电流滞环PWM控制因其实现简单、动态响应快等优势&#xff0c;成为三相逆变器常用的控制策略之一。然而&#xff0c;滞环宽度这一关键参数的选取&#xff0c;直接影响着系统的电…

作者头像 李华
网站建设 2026/7/11 1:11:02

ptcr配置详解:YAML配置文件参数全面解析与最佳实践

ptcr配置详解&#xff1a;YAML配置文件参数全面解析与最佳实践 【免费下载链接】ptcr A tool for container runtime performance measure. 项目地址: https://gitcode.com/openeuler/ptcr 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ ptcr是一款强…

作者头像 李华
网站建设 2026/7/11 1:08:33

iOS游戏内录屏插件开发:基于UE4与ReplayKit的深度集成与优化

1. 项目概述&#xff1a;为什么我们需要一个iOS上的UE4录制插件&#xff1f;在移动游戏开发&#xff0c;尤其是使用虚幻引擎4&#xff08;UE4&#xff09;开发iOS游戏的过程中&#xff0c;有一个需求一直很“痒”&#xff1a;如何让玩家在游戏内一键录制并分享他们的高光时刻&a…

作者头像 李华
网站建设 2026/7/11 1:04:21

微软MAI模型替代OpenAI:企业级AI自研战略与开发指南

上周&#xff0c;一位做企业内训的朋友和我聊起一件小事&#xff1a;他们公司内部用来辅助写培训材料的 AI 工具&#xff0c;突然提示“服务即将升级&#xff0c;部分功能可能调整”。他本能地担心是不是又要重新适应新界面、新流程&#xff0c;甚至担心之前积累的提示词模板会…

作者头像 李华