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

从数组末尾移除三元组并保持顺序:Java代码求助

数组去重修正:移除末尾重复三元组并保持元素顺序

需求说明

给定整数数组nums,需按以下规则处理:

  • 若元素在数组中出现次数≥3,仅保留该元素最靠前的(总出现次数-3)个实例,移除末尾的重复三元组部分
  • 若元素出现次数<3,全部保留
  • 最终剩余元素需保持原数组中的相对顺序

示例

示例1

输入:nums = [2,4,2,2,7,5,6,7,8,6,6,2,6,7,6]
输出:nums = [2,4,5,6,8,6]
解释:

  • 2出现4次 → 保留4-3=1个(最靠前的1个)
  • 7出现3次 → 保留3-3=0个(全部移除)
  • 6出现5次 → 保留5-3=2个(最靠前的2个)
  • 4、5、8各出现1次 → 全部保留

示例2

输入:nums = [2,2,3,2,3,2]
输出:nums = [2,3,3]
解释:

  • 2出现4次 → 保留4-3=1个(最靠前的1个)
  • 3出现2次 → 全部保留

原代码问题分析

你的代码存在以下核心问题:

  1. 未定义变量arr却直接使用,会触发编译错误
  2. 结果数组ans长度写死为6,无法适配不同输入场景
  3. count变量逻辑错误,没有针对每个元素独立统计次数,也未实现“保留前N个、移除末尾三元组”的规则
  4. 双重循环的遍历逻辑完全偏离需求,仅做了无意义的元素比较

修正后的Java代码

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

public class RemoveTripleDuplicates {
    public static void main(String[] args) {
        int[] nums = {2,4,2,2,7,5,6,7,8,6,6,2,6,7,6};
        int[] result = removeTripleDuplicatesFromEnd(nums);
        
        // 打印结果
        System.out.print("输出:nums = [");
        for (int i = 0; i < result.length; i++) {
            if (i > 0) System.out.print(",");
            System.out.print(result[i]);
        }
        System.out.println("]");
    }

    public static int[] removeTripleDuplicatesFromEnd(int[] nums) {
        // 统计每个元素的总出现次数
        Map<Integer, Integer> countMap = new HashMap<>();
        for (int num : nums) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }

        // 计算每个元素需要保留的数量
        Map<Integer, Integer> keepCountMap = new HashMap<>();
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            int total = entry.getValue();
            keepCountMap.put(entry.getKey(), total >= 3 ? total - 3 : total);
        }

        // 遍历原数组,收集符合要求的元素
        List<Integer> resultList = new ArrayList<>();
        for (int num : nums) {
            int keepCount = keepCountMap.get(num);
            if (keepCount > 0) {
                resultList.add(num);
                keepCountMap.put(num, keepCount - 1);
            }
        }

        // 转换为int数组返回
        return resultList.stream().mapToInt(Integer::intValue).toArray();
    }
}

代码逻辑说明

  1. 统计元素次数:通过HashMap遍历数组,记录每个元素的总出现次数
  2. 计算保留数量:对每个元素,若总次数≥3则保留总次数-3个,否则保留全部
  3. 收集结果:再次遍历原数组,遇到元素时若还有保留额度,就加入结果列表,并减少该元素的保留额度,确保只保留最靠前的符合数量的元素
  4. 转换数组:将结果列表转换为int数组返回

内容的提问来源于stack exchange,提问作者Sumit Odich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:45:12