You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组元素最多保留2次重复的实现问题求助

解决数组元素最多保留2次重复的问题

你之前用HashMap统计频率后直接删除元素的思路走偏了,其实不需要删除整个元素的实例,而是要控制每个元素在结果里的出现次数不超过2次,下面给你两种实用的解决方法:

方法1:原地遍历计数(最优解)

不需要额外的哈希表,直接遍历数组,利用原数组空间原地修改,时间复杂度O(n),空间复杂度O(1):

import java.util.Arrays;

public class Solution {
    public static int[] keepAtMostTwoDuplicates(int[] nums) {
        if (nums.length <= 2) return nums;
        
        // 前两个元素直接保留,从第三个开始检查
        int writeIndex = 2;
        for (int i = 2; i < nums.length; i++) {
            // 只要当前元素和已保留的倒数第二个元素不同,就说明可以保留
            // (如果相同,说明已经连续出现2次,再出现就是多余的)
            if (nums[i] != nums[writeIndex - 2]) {
                nums[writeIndex++] = nums[i];
            }
        }
        // 截取有效长度的数组返回
        return Arrays.copyOf(nums, writeIndex);
    }

    public static void main(String[] args) {
        int[] input = {2, 2, 2, 3, 4, 4, 5};
        int[] output = keepAtMostTwoDuplicates(input);
        System.out.println(Arrays.toString(output)); // 输出 [2, 2, 3, 4, 4, 5]
    }
}

方法2:改进HashMap的用法(符合你最初的思路)

如果一定要用HashMap,别直接删除元素,而是用它跟踪每个元素已经添加到结果中的次数,遍历原数组时只保留前2次出现的实例:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Solution {
    public static List<Integer> keepAtMostTwoDuplicates(int[] nums) {
        List<Integer> result = new ArrayList<>();
        Map<Integer, Integer> addedCount = new HashMap<>();
        
        for (int num : nums) {
            int count = addedCount.getOrDefault(num, 0);
            if (count < 2) {
                result.add(num);
                addedCount.put(num, count + 1);
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] input = {2, 2, 2, 3, 4, 4, 5};
        List<Integer> output = keepAtMostTwoDuplicates(input);
        System.out.println(output); // 输出 [2, 2, 3, 4, 4, 5]
    }
}

为什么你的原思路不行?

你之前用map.remove()会直接删掉整个元素的所有记录,等于把该元素从结果中完全移除了,而我们需要的是保留前2次出现的实例,所以应该跟踪每个元素已保留的次数,而不是删除元素本身。

内容的提问来源于stack exchange,提问作者Sandeep Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:10:19