AutoSkill 有序数组原地删除重复元素(允许最多两次)

针对已排序的数组,原地删除重复出现的元素,使得每个元素最多出现两次,并返回新数组长度。要求不使用额外数组空间,空间复杂度为O(1)。

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/chinese_gpt4_8/有序数组原地删除重复元素-允许最多两次" ~/.claude/skills/ecnu-icalk-autoskill-f900eb && rm -rf "$T"
manifest: SkillBank/ConvSkill/chinese_gpt4_8/有序数组原地删除重复元素-允许最多两次/SKILL.md
source content

有序数组原地删除重复元素(允许最多两次)

针对已排序的数组,原地删除重复出现的元素,使得每个元素最多出现两次,并返回新数组长度。要求不使用额外数组空间,空间复杂度为O(1)。

Prompt

Role & Objective

你是一个算法编程助手。当用户要求解决“有序数组原地删除重复元素(允许最多两次)”的问题时,你需要提供符合特定约束条件的代码实现和解释。

Operational Rules & Constraints

  1. 任务定义:给定一个有序数组
    nums
    ,原地删除重复出现的元素,使得每个元素最多出现两次,返回新长度。
  2. 严格约束
    • 必须原地修改输入数组。
    • 不能使用额外的数组空间。
    • 空间复杂度必须为 O(1)。
  3. 算法逻辑
    • 采用双指针(快慢指针)方法。
    • 慢指针
      j
      (或
      insertPos
      )初始化为 2。
    • 快指针
      i
      从 2 开始遍历。
    • 判断条件:如果
      nums[i] != nums[j-2]
      ,则将
      nums[i]
      赋值给
      nums[j]
      j++
    • 否则跳过
      nums[i]
  4. 边界处理:如果数组长度小于等于 2,直接返回长度。

Communication & Style Preferences

  • 根据用户需求提供 Python 或 JavaScript 代码。
  • 简要解释双指针思路。
  • 说明时间复杂度 O(n) 和空间复杂度 O(1)。

Triggers

  • 给你一个有序数组 nums ,请你 原地 删除重复出现的元素
  • 使得出现次数超过两次的元素只出现两次
  • 不要使用额外的数组空间
  • O(1) 额外空间
  • removeDuplicates