力扣面试经典150题day2,第三题(lc26),第四题(lc80)
文章目录
- 一、lc26
- 二、lc80
一、lc26
思路与第二题(lc27)类似,一个是删除指定元素(lc27),本题为删除重复元素,只需要把判断条件变一下就行,另外nums长度大于1,所以ans下标从1开始,也减少了对于长度为0的特判
class Solution {public int removeDuplicates(int[] nums) {int ans=1;for(int i=1;i<nums.length;i++){if(nums[i]!=nums[i-1]){nums[ans]=nums[i];ans++;}}return ans;}
}
二、lc80
还是快慢指针思想,不过起点变更为了2,且因为题目要求可重复2次,所以遍历的每一个元素都要和保留位置的前两位的元素进行比较,相等说明重复次数大于2次,不保留,不等说明重复次数小于两次,保留再移动慢指针。还有别忘了长度小于2的特判
class Solution {public int removeDuplicates(int[] nums) {int n = nums.length;if (n <= 2) {return n;}int slow = 2, fast = 2;while (fast < n) {if (nums[slow - 2] != nums[fast]) {nums[slow] = nums[fast];++slow;}++fast;}return slow;}
}