织梦网站自动跳转手机网站,河北省石家庄市官网,网站全站开发需要学什么,自己做网站租服务器文章目录 写在前面Tag题目来源题目解读解题思路方法一#xff1a;原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法#xff0c;两到三天更新一篇文章#xff0c;欢迎催更…… 专栏内容以分析题目为主#xff0c;并附带一些对于本题涉及到的数据结构等… 文章目录 写在前面Tag题目来源题目解读解题思路方法一原地操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法两到三天更新一篇文章欢迎催更…… 专栏内容以分析题目为主并附带一些对于本题涉及到的数据结构等内容进行回顾与总结文章结构大致如下部分内容会有增删 Tag介绍本题牵涉到的知识点、数据结构题目来源贴上题目的链接方便大家查找题目并完成练习题目解读复述题目确保自己真的理解题目意思并强调一些题目重点信息解题思路介绍一些解题思路每种解题思路包括思路讲解、实现代码以及复杂度分析知识回忆针对今天介绍的题目中的重点内容、数据结构进行回顾总结。 Tag
【原地操作】【双指针】【数组】 题目来源
面试经典 150 题 —— 27. 移除元素 题目解读
移除数组 nums 中的 val 值要求原地操作但是数组中的元素顺序可以改变最后输出移除所有 val 后数组的长度。 解题思路
方法一原地操作
原地操作那么我们就不能使用额外的数组来存放非 val 的元素从而实现移除操作但是我们可以使用 “覆盖” 的思想来模拟移除操作。
具体地维护两个指针 i 和 ji 指针用来遍历数组查找哪个位置上的元素等于 valj 指向用来覆盖 i 位置的元素。初始化 i 0、j nums.size() - 1只要 nums[i] val我们就用 nums[j] 来覆盖使用了 nums[j] 之后j 指针就要左移指向下一个将要使用的元素只有 nums[i] ! val 时我们才会右移 i 指针准备处理下一个元素。
直到 i 指针超过 j 指针表明可以被用来覆盖的元素已经没有了i 的值就是原数组中的非 val 的数直接返回 i。
实现代码
class Solution {
public:int removeElement(vectorint nums, int val) {int i 0, j nums.size() - 1;while (i j) {if (nums[i] val) {nums[i] nums[j--];}else i;}return i;}
};复杂度分析
时间复杂度 O ( n ) O(n) O(n) n n n 为原数组 nums 的长度。
空间复杂度 O ( 1 ) O(1) O(1)仅使用了两个指针变量是原地操作。 写在最后
如果文章内容有任何错误或者您对文章有任何疑问欢迎私信博主或者在评论区指出 。
如果大家有更优的时间、空间复杂度方法欢迎评论区交流。
最后感谢您的阅读如果感到有所收获的话可以给博主点一个 哦。