「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。
前言
最近参加了2022年三月份的蓝桥杯比赛,所以计划学习算法和数据结构相关知识,但是平时都是学习不持续,所以希望借此机会来学习此知识点。因为我是在校大三学生,所以后续的算法相关代码都是使用js语言来进行完成。本文更新的是leetcode算法题之--删除有序数组中的重复项。
题目
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例
题解
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
let slow = 0, fast = 0, len = nums.length;
while(fast < len) {//当快指针小于数组长度时
if(nums[slow] === nums[fast]) {//如果快慢指针相等
fast++;//快指针加1
} else {//如果不相等
slow++;//满指针加1
nums[slow] = nums[fast];//并且直到快慢指针相等为止
}
}
return slow + 1;//返回满指针加1,得出结果
};
分析
快慢指针
- 头尾指针值一样时,尾指针右移
- 头尾指针值不一样时,头指针右移后,尾指针赋值给头指针