如何从数组中删除非重复数字 基于现有去重伪代码实现
伪代码修改方案
核心思路
你原来的逻辑是遇到重复元素就删除多余副本,最终每个元素仅保留1份。现在要保留出现次数≥2的元素(每个符合要求的元素最终也仅保留1份,匹配你给出的示例输出),可以分两步实现:
- 先统计数组中每个元素的总出现次数
- 遍历数组,仅保留出现次数≥2的元素,同时删除同一元素的多余副本
修改后的伪代码
// k为原数组的长度 // 初始化计数数组,cnt[i]表示arr[i]对应元素的全局出现次数 cnt <-- 长度为k的数组,所有元素初始值为0 j <-- 0 // 第一步:统计每个元素的总出现次数 for i <-- 0 to i < k do for j <-- 0 to j < k do if arr[i] = arr[j] then cnt[i] <-- cnt[i] + 1 endif endfor endfor // 第二步:过滤仅出现1次的元素,同时对符合要求的元素去重 res_idx <-- 0 // 结果数组的写入位置指针 for i <-- 0 to i < k do // 仅处理出现次数≥2的元素 if cnt[i] >= 2 then // 检查该元素是否已经加入结果,避免重复存储 is_exist <-- false for j <-- 0 to j < res_idx do if arr[i] = arr[j] then is_exist <-- true break endif endfor if not is_exist then arr[res_idx] <-- arr[i] res_idx <-- res_idx + 1 endif endif endfor k <-- res_idx // 更新数组有效长度 return arr[0..k-1]
逻辑补充说明
如果你需要保留所有重复元素的完整副本(比如示例输入输出为{1,1,1,0,0}),只需要删除第二步中检查元素是否已存在的判断逻辑即可。
内容的提问来源于stack exchange,提问作者EnanSaysHi
相关产品推荐
相关产品推荐

