【问题标题】:example about array in javajava中关于数组的例子
【发布时间】:2011-01-02 22:31:18
【问题描述】:

假设我有一个数组 int [] arr={1,2,4,5,7} 并且还有数字 6 所以我需要结果为 01100,这意味着数组中的 2+4=6 所以如果总和中的数字为 0,则结​​果将为 1 我还需要结果中的位数与数组长度相同

我需要执行此操作的 java 方法

【问题讨论】:

  • 你写过估值函数/方法吗?我的意思是,给定一个位模式和数组,返回适当值的总和?

标签: java algorithm subset-sum


【解决方案1】:

这与 subset sum problem 非常相似,即给定一组整数,确定非空子集是否等于 0。在您的情况下,您需要确定非空子集是否等于特定整数。后面关于填充位数组的部分纯属装饰。

解决它的一种简单方法——尽管效率不高,即O(2^N*N)——是在数组中每个可能的整数子集(power set)之间循环,并确定该子集的总和是否等于给你的号码。

【讨论】:

    【解决方案2】:

    这是一种递归方式。正如 JG 所指出的,一般问题没有有效的解决方案。

    private static int[] solve(int[] arr, int target, int res[], int length, int sum) {
        if (length == arr.length)
            return (sum == target)? res : null;
        res[length] = 0;
        int[] r = solve(arr, target, res, length + 1, sum);
        if (r != null)
            return r;
        res[length] = 1;
        r = solve(arr, target, res, length + 1, sum + arr[length]);
        if (r != null)
            return r;
        return null;
    }
    
    public static int[] solve(int[] arr, int target) {
        return solve(arr, target, new int[arr.length], 0, 0);
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2011-09-09
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多