3396. 使数组元素互不相同所需的最少操作次数 - 力扣(LeetCode)



可以使用贪心+哈希集合的方法来解决这个问题:
- 维护一个哈希集合
seen来存储已经出现过的元素。 - 遍历数组
nums,检查当前元素是否已经在seen中:- 如果存在重复元素,就必须执行一次移除操作,即从开头移除 3 个元素。
- 记录移除的次数,并清空
seen,从新的数组起点重新检查。
- 继续执行操作,直到
nums变为空或所有元素互不相同。 - 返回执行操作的次数。
实现代码如下:
def minOperations(nums):
seen = set()
ops = 0 # 记录操作次数
i = 0 # 指向数组当前遍历的位置
while i < len(nums):
if nums[i] in seen:
# 发现重复元素,移除前三个元素
ops += 1
nums = nums[3:] if len(nums) >= 3 else []
seen.clear() # 清空集合
i = 0 # 重置索引
else:
seen.add(nums[i])
i += 1
return ops
复杂度分析:
- 最坏情况下,每次操作删除 3 个元素,因此最多执行
O(n/3)次操作,即O(n)。 - 使用哈希集合存储唯一元素,每次操作
O(1),总时间复杂度约为O(n)。
这个方法可以保证最小的移除次数,使得 nums 互不相同。你可以提供一些测试用例来验证它的正确性!🚀
538

被折叠的 条评论
为什么被折叠?



