当前位置: 首页> 科技> 互联网 > 法律咨询免费律师在线咨询_合肥网页设计公司_bt kitty磁力猫_广州seo实战培训

法律咨询免费律师在线咨询_合肥网页设计公司_bt kitty磁力猫_广州seo实战培训

时间:2025/7/10 13:19:37来源:https://blog.csdn.net/m0_63680328/article/details/142406629 浏览次数:0次
法律咨询免费律师在线咨询_合肥网页设计公司_bt kitty磁力猫_广州seo实战培训

思路大致跟上一题一样

题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解决思路:

  1. 双指针法:可以使用两个指针,一个用于遍历数组,另一个用于跟踪新数组中允许的唯一元素的位置。
  2. 保持最多两次重复:由于数组是有序的,我们只需要关注每个元素的出现次数是否大于 2 次。因此,对于每个元素,允许其最多出现两次。

具体步骤:

  1. 使用两个指针 ij

    • i:是慢指针,表示当前数组中有效元素的最后一个位置。
    • j:是快指针,用于遍历数组。
  2. 初始化 i = 1,表示前两个元素无论如何都需要保留,因为我们允许元素最多出现两次。

  3. 从第三个元素(j = 2)开始遍历数组:

    • 如果当前元素 nums[j] 不等于 nums[i-1],说明它与前两个元素不同或者第一次遇到这个元素,我们可以将其放到 nums[i+1] 位置。
    • 如果相等,则跳过这个元素。
  4. 遍历结束后,i+1 就是最终数组的长度。

代码

class Solution:def removeDuplicates(self, nums: List[int]) -> int:if len(nums) <= 2:  # 如果数组长度小于等于2,直接返回长度return len(nums)i = 1  # 慢指针,指向有效数组的末尾for j in range(2, len(nums)):  # 快指针,从第三个元素开始遍历if nums[j] != nums[i-1]:  # 如果当前元素与nums[i-1]不同i += 1  # 移动慢指针nums[i] = nums[j]  # 更新有效数组return i + 1  # 返回数组长度

关键字:法律咨询免费律师在线咨询_合肥网页设计公司_bt kitty磁力猫_广州seo实战培训

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: