来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii
注意题目关键字,1. 有序数组;2. 每个元素最多出现两次 3. 不适用额外的空间
class Solution { public int removeDuplicates(int[] nums) { int n = nums.length; //题目中写到每个元素最多出现两次,如果数组长度为2活着小于2 可以直接返回数据的 //长度,最大也就是两个元素相等 if (n <= 2) { return n; } //这里快慢指针从2开始,然后因为是有序数组,所以nums[slow-2]如果等于nums[fast] //那么必然得出nums[slow-2] == nums[slow-1] == nums[fast] 比如一个数组 1,2, //第三个肯定不可能是1了,如果第三个和第一个相等,因为是有序数组,第二个肯定也和他们相等 int fast = 2; int slow = 2; while (fast < n) { if (nums[slow-2] != nums[fast]) { //这里找到超过两个不相等的元素,将fast下标的元素赋值给slow下标,slow指针接着往后走 nums[slow] = nums[fast]; slow++; } fast++ } return slow; } }
原文:https://www.cnblogs.com/jlsblog/p/14623752.html