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

如何从给定uint数组中选出相加等于指定值的元素并返回所用元素

解决方案

你给出的数组所有元素均为不重复的2的整数次幂,任意正整数的二进制表示唯一,因此你要找的组合等价于n的二进制表示中所有值为1的位对应的2的幂次值,用位运算可以非常高效地完成匹配:

  • 核心判断逻辑:对数组中每个元素v,只要n & v == v成立,说明v是组成n的元素之一

代码示例(C#)

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        uint[] values = new uint[]
        {
            1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048,
        };
        uint n = 96;
        List<uint> result = new List<uint>();
        
        foreach (uint v in values)
        {
            if ((n & v) == v)
            {
                result.Add(v);
            }
        }
        
        // 输出结果:32、64
        Console.WriteLine(string.Join("、", result));
    }
}

扩展说明

如果你的实际业务场景中数组元素不是2的幂次,且仍然保证只有唯一解,可以用回溯法遍历所有可能的子集求和匹配,不过时间复杂度会升高到O(2^k),k为数组长度,使用前需要确认数组长度不会过大。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:36:03