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

Java查找出现奇数次整数,qualified.io测试未通过求排查

解决列表中寻找出现奇数次整数的问题

我太懂这种明明觉得思路没问题,但测试就是不通过的憋屈感了!先看你提到的示例数组[5,1,1,5,2,2,5],5确实出现了3次(奇数次),其他元素都是偶数次,所以结果应该是包含5的List。咱们来捋捋你的问题,再给出靠谱的解决方案。

先说说你现有代码的问题

你开头判断了列表长度是否为偶数,但这个条件和元素出现次数的奇偶性根本不挂钩:比如列表长度是偶数时,可能存在两个元素各出现奇数次;长度是奇数时,可能只有一个元素出现奇数次。这个判断分支不仅帮不上忙,反而容易让你偏离正确的逻辑方向。

方案一:通用型——用哈希表统计次数(适合多个元素出现奇数次的情况)

这种方法不管题目是否限制只有一个目标元素,都能准确找出所有出现奇数次的整数,逻辑直白好理解:

  1. 遍历列表,用哈希表记录每个数字的出现次数
  2. 遍历哈希表,筛选出次数为奇数的数字,加入结果List

代码实现:

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

public class OddFinder {
    public static List<Integer> findOdd(List<Integer> integers) {
        Map<Integer, Integer> countMap = new HashMap<>();
        
        // 统计每个数字的出现次数
        for (int num : integers) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }
        
        List<Integer> result = new ArrayList<>();
        // 筛选出现奇数次的数字
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() % 2 != 0) {
                result.add(entry.getKey());
            }
        }
        
        return result;
    }
}

方案二:高效型——用异或运算(适合题目保证只有一个元素出现奇数次的情况)

如果题目明确说明只有一个元素出现奇数次,那异或运算绝对是最优解,时间复杂度O(n),空间复杂度O(1),利用了异或的两个核心特性:

  • 相同数字异或结果为0(比如1^1=0)
  • 0和任何数字异或结果为该数字本身(比如0^5=5)

遍历列表把所有数字异或起来,最终结果就是那个出现奇数次的数字,再把它加入List返回即可:

import java.util.ArrayList;
import java.util.List;

public class OddFinder {
    public static List<Integer> findOdd(List<Integer> integers) {
        int xorResult = 0;
        for (int num : integers) {
            xorResult ^= num;
        }
        
        List<Integer> result = new ArrayList<>();
        result.add(xorResult);
        return result;
    }
}

你可以根据题目要求选择对应的方案,把代码替换后再去测试,应该就能通过了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:15