LeetCode100天Day13-移除元素与多数元素:双指针移除与排序计数
摘要:本文详细解析了LeetCode中两道经典数组题目——“移除元素"和"多数元素”。通过双指针实现原地移除元素,以及使用排序和计数查找多数元素,帮助读者掌握数组元素操作和查找的技巧。
目录
文章目录
- LeetCode100天Day13-移除元素与多数元素:双指针移除与排序计数
- 目录
- 1. 移除元素(Remove Element)
- 1.1 题目描述
- 1.2 解题思路
- 1.3 代码实现
- 1.4 代码逐行解释
- 第一部分:初始化指针
- 第二部分:遍历数组
- 1.5 执行流程详解
- 1.6 算法图解
- 1.7 复杂度分析
- 1.8 边界情况
- 2. 多数元素(Majority Element)
- 2.1 题目描述
- 2.2 解题思路
- 2.3 代码实现
- 2.4 代码逐行解释
- 第一部分:计算阈值
- 第二部分:排序
- 第三部分:统计计数
- 2.5 执行流程详解
- 2.6 算法图解
- 2.7 复杂度分析
- 2.8 边界情况
- 3. 两题对比与总结
- 3.1 算法对比
- 3.2 双指针移除模板
- 3.3 排序+计数模板
- 3.4 摩尔投票法
- 3.5 整数除法陷阱
- 4. 总结
- 参考资源
- 文章标签
1. 移除元素(Remove Element)
1.1 题目描述
给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2,_,_] 解释:函数应该返回新的长度2,并且nums中的前两个元素均为2。你不需要考虑数组中超出新长度后面的元素。示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,3,0,4,_,_,_] 解释:函数应该返回新的长度5,并且nums中的前五个元素为0, 1, 3, 0, 4。注意这五个元素可以任意顺序。你不需要考虑数组中超出新长度后面的元素。