实现delete_nth功能:如何删除数组元素不打乱循环计数器
解法
你选择的创建新列表而非直接修改原列表的思路是完全可行的,只需要额外加一个计数容器记录每个元素在新列表中已经出现的次数即可,不需要修改原数组,也不会出现索引偏移问题。
实现逻辑
- 初始化空的结果列表,以及空的字典用来统计每个元素的已出现次数
- 按顺序遍历原列表的每一个元素:
- 若当前元素没有计数记录,先将它的计数初始化为0
- 若当前元素的已出现次数小于限制值N:将该元素加入结果列表,同时对应计数+1
- 若当前元素的已出现次数已经等于N:直接跳过该元素即可
代码示例(Python)
def delete_nth(lst, n): count = {} res = [] for num in lst: current_count = count.get(num, 0) if current_count < n: res.append(num) count[num] = current_count + 1 return res
测试验证
运行给出的测试用例结果完全匹配:
delete_nth([1,1,1,1],2)返回[1,1]delete_nth([20,37,20,21],1)返回[20,37,21]- 题目示例
delete_nth([1,2,3,1,2,1,2,3], 2)返回[1,2,3,1,2,3]
内容的提问来源于stack exchange,提问作者Rick Perez
相关产品推荐
相关产品推荐

