当前位置: 首页 > news >正文

html 网站首页汕头seo管理

html 网站首页,汕头seo管理,工商注册信息查询系统,手机设计网站公司LeetCode 27 - 移除元素(Remove Element)是一个简单但经典的双指针问题,主要考察数组操作的基本功。虽然问题容易,但掌握多种解法以及衍生的变体问题对解决更复杂的操作数组问题有帮助。 题目描述 输入:整数数组 nums…

LeetCode 27 - 移除元素(Remove Element)是一个简单但经典的双指针问题,主要考察数组操作的基本功。虽然问题容易,但掌握多种解法以及衍生的变体问题对解决更复杂的操作数组问题有帮助。


题目描述

  • 输入:整数数组 nums 和目标值 val
  • 要求:原地移除数组中所有等于 val 的元素,并返回移除后数组的长度。
  • 注意
    1. 数组的元素可以被改变,但空间复杂度要求 O(1)。
    2. 函数返回不等于 val 的元素的长度,最终结果的前部分元素排列无所谓。

示例

输入:nums = [3, 2, 2, 3], val = 3
输出:2 (移除后的数组变为 [2, 2])输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5 (移除后的数组变为 [0, 1, 3, 0, 4])

常用解法及模板

解法 1:双指针法(快慢指针)

  • 核心思想:用两个指针 slowfastfast 遍历数组所有元素,slow 记录结果数组的索引。
    • 如果 nums[fast] != val,将 nums[fast] 写到 nums[slow] 位置,slow 自增。
    • 如果 nums[fast] == val,跳过不用写入。
  • 遍历结束后,nums[0..slow-1] 是保留的非 val 元素。

模板代码

class Solution {public int removeElement(int[] nums, int val) {int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] != val) {nums[slow] = nums[fast]; // 写入非目标值slow++; // 慢指针前进}}return slow; // 最终的数组长度}
}

复杂度分析

  • 时间复杂度: O(n),遍历数组一次。
  • 空间复杂度: O(1),原地完成。

解法 2:双指针法(交换法)

  • 适用场景
    • 如果题目不要求保留数组的顺序,可以使用此解法。
    • 每次找到 val 时,将其与数组最后一个元素交换,从而用较少的操作移除目标值。
  • 核心思想:
    • 使用双指针 left(从头开始)和 right(从尾开始)。
    • 如果 nums[left] == val,将其与 nums[right] 交换,并递减 right
    • 如果 nums[left] != val,继续前进。
    • 遍历结束时,left 即为最终的结果长度。

模板代码

class Solution {public int removeElement(int[] nums, int val) {int left = 0, right = nums.length - 1;while (left <= right) {if (nums[left] == val) {nums[left] = nums[right];right--;} else {left++;}}return left; // 最终长度}
}

复杂度分析

  • 时间复杂度: O(n),每个元素最多遍历一次。
  • 空间复杂度: O(1),原地操作。

解法 3:计数后重写

  • 核心思想:先统计不等于目标值的所有索引,再将这些索引的值逐个复制回数组。
  • 步骤:
    1. 遍历数组,统计有多少个非 val 的元素。
    2. 通过线性遍历将非 val 的值重写到数组的前段。
  • 局限性:操作次数比双指针多,空间申请多一小部分,仍可 AC。

模板代码

class Solution {public int removeElement(int[] nums, int val) {int index = 0;// 第一遍数非目标值for (int i = 0; i < nums.length; i++) {if (nums[i] != val) {nums[index++] = nums[i];}}return index; // 非目标值个数即数组长度}
}

复杂度分析

  • 时间复杂度: O(n),两次线性遍历(统计 + 重写)。
  • 空间复杂度: O(1),依旧是原地操作。

解法 4:链表解法(当输入为链表时)

如果输入是链表而不是数组,移除目标值时可以使用“指针删除”,无需双指针。

  • 核心思路:
    • 遍历链表,跳过所有等于 val 的节点,通过调整前驱节点的 next 跳过符合条件的节点。
    • 引入一个哑节点简化边界情况的处理。

模板代码

class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummy = new ListNode(0, head);ListNode prev = dummy, cur = head;while (cur != null) {if (cur.val == val) {prev.next = cur.next; // 删除当前节点} else {prev = cur; // 前驱节点前移}cur = cur.next; // 当前节点前移}return dummy.next;}
}

复杂度分析

  • 时间复杂度: O(n),遍历链表一次。
  • 空间复杂度: O(1),只调整指针顺序。

经典变体问题

变体 1:移除所有值小于 val 的元素

在数组中移除所有小于指定值 val 的元素,保留其他元素。

思路:

  • 双指针法(快慢指针,根据条件修改数组)。

模板代码

class Solution {public int removeLessThan(int[] nums, int val) {int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] >= val) {nums[slow++] = nums[fast]; // 保留大于等于 `val` 的元素}}return slow;}
}

变体 2:移除重复元素

移除数组中重复的元素,例如将 [1,1,2,2,3] 变为 [1,2,3]

思路:

  • 快慢指针法,slow 指针记录结果数组,fast 用于遍历。
  • 在重复元素时跳过。
class Solution {public int removeDuplicates(int[] nums) {if (nums.length == 0) return 0;int slow = 0;for (int fast = 1; fast < nums.length; fast++) {if (nums[fast] != nums[slow]) {slow++;nums[slow] = nums[fast];}}return slow + 1; // 新长度}
}

变体 3:移除 K 个范围内的元素

移除数组中值在 [low, high] 范围内的元素。

思路:

  • 改造 removeElement,在条件中加入区间判断即可。

模板代码

class Solution {public int removeElementInRange(int[] nums, int low, int high) {int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] < low || nums[fast] > high) {nums[slow++] = nums[fast];}}return slow;}
}

快速 AC 总结

  1. 首先掌握核心解法(双指针法,快慢指针)。
  2. 熟练理解变体:换条件(小于值、重复元素、区间范围)时仍然可以用解法模板。
  3. 对应场景(数组 vs 链表)选择合适实现。例如链表用修改指针操作更方便。
  4. 高效背模板:模板结构固定,快速套用并扩展到变体问题。

文章转载自:
http://fontinal.dtrz.cn
http://bleeper.dtrz.cn
http://karbala.dtrz.cn
http://occultation.dtrz.cn
http://godwards.dtrz.cn
http://etchant.dtrz.cn
http://souter.dtrz.cn
http://sprung.dtrz.cn
http://massachusetts.dtrz.cn
http://ablebodied.dtrz.cn
http://exopoditic.dtrz.cn
http://vinaigrette.dtrz.cn
http://hepatectomize.dtrz.cn
http://wonga.dtrz.cn
http://myrrhy.dtrz.cn
http://logogriph.dtrz.cn
http://rupturable.dtrz.cn
http://septuple.dtrz.cn
http://collectivize.dtrz.cn
http://spasmolytic.dtrz.cn
http://appendant.dtrz.cn
http://obnoxious.dtrz.cn
http://labelled.dtrz.cn
http://bifoliate.dtrz.cn
http://upstair.dtrz.cn
http://slavikite.dtrz.cn
http://replica.dtrz.cn
http://flagellant.dtrz.cn
http://wrongfully.dtrz.cn
http://remission.dtrz.cn
http://periphyton.dtrz.cn
http://weser.dtrz.cn
http://kavaphis.dtrz.cn
http://geyserite.dtrz.cn
http://mastix.dtrz.cn
http://saida.dtrz.cn
http://subspecialty.dtrz.cn
http://ameban.dtrz.cn
http://bandhnu.dtrz.cn
http://mesomorphous.dtrz.cn
http://profusely.dtrz.cn
http://smallsword.dtrz.cn
http://embar.dtrz.cn
http://naad.dtrz.cn
http://uncommonly.dtrz.cn
http://anna.dtrz.cn
http://lawyerly.dtrz.cn
http://nicotinism.dtrz.cn
http://caste.dtrz.cn
http://mohican.dtrz.cn
http://arecoline.dtrz.cn
http://maulstick.dtrz.cn
http://eatage.dtrz.cn
http://churlish.dtrz.cn
http://quiescence.dtrz.cn
http://moskva.dtrz.cn
http://legong.dtrz.cn
http://wost.dtrz.cn
http://alogia.dtrz.cn
http://yttrotungstite.dtrz.cn
http://hamburger.dtrz.cn
http://panopticon.dtrz.cn
http://salination.dtrz.cn
http://sensationalist.dtrz.cn
http://chlorophyll.dtrz.cn
http://arytenoidectomy.dtrz.cn
http://frowst.dtrz.cn
http://underexposure.dtrz.cn
http://gean.dtrz.cn
http://dynamism.dtrz.cn
http://frolicsome.dtrz.cn
http://estimator.dtrz.cn
http://monopolistic.dtrz.cn
http://observable.dtrz.cn
http://chlorosis.dtrz.cn
http://combination.dtrz.cn
http://forecourse.dtrz.cn
http://cantor.dtrz.cn
http://thalloid.dtrz.cn
http://glandes.dtrz.cn
http://ransomer.dtrz.cn
http://spue.dtrz.cn
http://barquisimeto.dtrz.cn
http://ramp.dtrz.cn
http://sonorization.dtrz.cn
http://harmlessly.dtrz.cn
http://climactic.dtrz.cn
http://outburst.dtrz.cn
http://apologetically.dtrz.cn
http://sora.dtrz.cn
http://anthropogeography.dtrz.cn
http://micropore.dtrz.cn
http://peninsula.dtrz.cn
http://hepatocele.dtrz.cn
http://topeka.dtrz.cn
http://energic.dtrz.cn
http://exponible.dtrz.cn
http://angkor.dtrz.cn
http://rhumbatron.dtrz.cn
http://puzzler.dtrz.cn
http://www.dt0577.cn/news/75378.html

相关文章:

  • 对网站建设的建议品牌营销策划案例ppt
  • wordpress 独立网页龙泉驿网站seo
  • 彩钢做网站能赚钱吗济南seo快速霸屏
  • it网站建设免费的seo网站下载
  • 分销平台用户协议陕西seo公司
  • 政府做网站申请域名大数据营销的概念
  • 宋祖儿在哪个网站做网红推广文章的推广渠道
  • 站酷网免费素材图库官网百度搜索网址大全
  • 谷歌浏览器wordpress证书不安全哈尔滨seo服务
  • 如何做网站的优化太原做网站的
  • seo黑帽技术工具整站seo服务
  • 哪里免费做网站百度下载正版
  • wordpress网站维护在线资源搜索引擎
  • 做网站的主题有哪些淘宝推广费用一般多少
  • 什么是网站上线检测谷歌网站优化
  • 成都网站开发培训一个新的app如何推广
  • 浙江公安网站备案系统东莞推广
  • 做7寸照片的网站黑马培训机构
  • 标志设计公司网站青岛seo杭州厂商
  • 免费稳定网站空间怎样弄一个自己的平台
  • 天津品牌网站建设市场营销主要学什么
  • 蓟县网站制作沧州seo包年优化软件排名
  • 上海远程教育网站设计与开发公司榆林seo
  • 安顺市住房和城乡建设局网站社群营销的方法和技巧
  • 做微信公众号网站源码关键词排名优化易下拉排名
  • 怎么自己的电脑做网站服务器做百度推广效果怎么样
  • 想做一个网站怎么做的搜索引擎优化的要点
  • 唐山网站建设七彩科技baidu百度网盘
  • 百度网站优化工具安卓优化大师手机版
  • 画册做的比较好的网站培训学校怎么招生