【面试算法笔记】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); } }时空复杂度分析同上

相关新闻

最新新闻

固资管理系统是企业固资管理从“管不清楚“到“心中有数“的转变之路

固资管理系统是企业固资管理从“管不清楚“到“心中有数“的转变之路

说起固定资产管理,很多企业的现状是:资产在哪、谁在用、还剩多少价值,全靠Excel和记忆力。一年到头盘点一次,结果发现账上有的东西找不着了,正在用的东西没入账,折旧算了半天还是一团乱。像首码固资管理系统…

2026/7/11 2:10:38
7位艺人集体讨薪!综艺导演跑路背后,谁在透支行业信任?

7位艺人集体讨薪!综艺导演跑路背后,谁在透支行业信任?

又一起综艺圈欠薪事件刷屏了。近日,一档综艺节目的导演被曝欠薪跑路,娄艺潇、蒋依依等7位艺人集体发声讨薪,事件迅速登上热搜。说实话,看到这个新闻的第一反应是:综艺圈的信任危机,可能比我们想象的更严重。…

2026/7/11 2:10:38
本体语义平台落地四阶段

本体语义平台落地四阶段

本体语义平台听起来很美好——统一业务语义、支持AI推理、跨系统数据串联——但企业真正落地时往往不知道从哪一步开始。本体语义平台建设不是"一次性大项目",是"分阶段、逐步推进"的持续工程。把整个过程拆成四个阶段,每阶段有明确…

2026/7/11 2:10:38
5款Word转PDF方案横向评测:Apache OpenOffice 4.1.16 vs Aspose vs Spire.doc vs POI vs docx4j

5款Word转PDF方案横向评测:Apache OpenOffice 4.1.16 vs Aspose vs Spire.doc vs POI vs docx4j

5款Word转PDF方案横向评测:技术选型与实战指南当企业需要将大量Word文档转换为PDF格式时,技术选型往往成为困扰开发团队的难题。面对开源与商业、本地与云端等不同维度的解决方案,如何做出最优选择?本文将从实际应用场景出发&…

2026/7/11 2:10:38
Effective C++ 学习笔记 条款28 避免返回handles指向对象内部成分

Effective C++ 学习笔记 条款28 避免返回handles指向对象内部成分

假设你在开发一个涉及矩形的应用程序。每个矩形可以由其左上角和右下角来表示。为了让 Rectangle 对象足够小,你决定不把界定矩形范围的点直接存储在 Rectangle 内部,而是放在一个辅助结构体中,由 Rectangle 通过指针指向它:由于 …

2026/7/11 2:10:38
《HarmonyOS技术精讲-蓝牙》基础篇:从零了解蓝牙服务开发

《HarmonyOS技术精讲-蓝牙》基础篇:从零了解蓝牙服务开发

从零开始控制蓝牙:HarmonyOS 蓝牙开发基础 HarmonyOS NEXT 开发中,蓝牙功能是很多应用(智能家居、运动健康、文件传输)的基石。官方文档提供了完整的 API 描述,但许多初学者第一次接触 bluetoothManager 时&#xff0c…

2026/7/11 2:05:38

月新闻