做羞羞事的网站,建立网站需要多少钱一个,wordpress文章翻页,自媒体做什么领域比较好LeetCode刷题笔记第80题#xff1a;删除有序数组中的重复项 II
题目#xff1a;
删除升序数组中超过两次的元素后的数组长度
想法#xff1a;
使用快慢指针的方法完成#xff0c;使用快指针遍历整个数组#xff0c;使用慢指针完成相同元素最多保留两个。在快指针遍历到…LeetCode刷题笔记第80题删除有序数组中的重复项 II
题目
删除升序数组中超过两次的元素后的数组长度
想法
使用快慢指针的方法完成使用快指针遍历整个数组使用慢指针完成相同元素最多保留两个。在快指针遍历到超过两个相同元素时慢指针停止移动等到快指针遍历的不同的元素时将不同元素赋值给慢指针所在位置并向后移动一位直至快指针遍历完整个数组慢指针所在的位置即为删除后的数组长度。
class Solution:def removeDuplicates(self, nums: List[int]) - int:slow 0for fast in range(len(nums)):if slow 2 or nums[fast] ! nums[slow - 2]:nums[slow] nums[fast]slow 1return slow时间复杂度O(N) 空间复杂度O(1) 本题中的想法主要是利用快指针遍历数组找到所有不超过两个的相同元素并将这些元素赋值给慢指针所指因为是在原数组上的原地操作所以慢指针所指新数组没有产生额外的空间占用