/** * https://leetcode.cn/problems/remove-duplicates-from-sorted-array/?envType=study-plan-v2&envId=top-interview-150 * @param {number[]} nums * @return {number} 不重复元素的数量 */ const removeDuplicates = function (nums) { // 直接利用Set的去重特性(hash) const numSet = new Set(nums); let i = 0; for (const num of numSet) { nums[i] = num; i++; } return numSet.size; }; // 上面的方法虽然好理解,但是需要遍历整个数组才能转换成Set,加上hash操作,并不是最优解。因为提供的nums已经是一个“非严格递增的数组”, // 只需利用双指针处理即可,首先定义两个指针p1,p2,p1指向第一个元素,p2指向第二个元素(如果有的话),p2开始遍历,如果遍历到得元素和nums[p1] // 不相等,p1++ 并把这个值赋值到p1的位置,最后返回p1+1 const removeDuplicates2 = function (nums) { if (nums.length < 2) return 1; let p1 = 0; for (let p2 = 1; p2 < nums.length; p2++) { if (nums[p1] !== nums[p2]) { nums[++p1] = nums[p2]; } } return p1 + 1; // 下标加1表示个数 };