美文网首页
K数和问题

K数和问题

作者: 04040d1599e6 | 来源:发表于2019-01-13 17:32 被阅读0次

Leetcode上有一个系列的问题

  1. 在一个数组中找寻2个数的和值为target
  2. 在一个数组中找寻3个数的和值为target
  3. 在一个数组中找寻4个数的和值为target
    在一个给定的数组A中找寻k个数,使其值等于target,一共有多少种方案。

这道题用DP来做。
result[i][j][target]
i表示数组的大小。j 标识找寻多少个值。k标识目标值。A表示给定数组。
所有有

result[i][j][target] = result[i - 1][j - 1][target - A[i]]  + result[i - 1][j][target];

站在i的位置考虑,即考虑是否需要i位的值。
result[i - 1][j][target] 表示不需要i位的值
result[i - 1][j - 1][target - A[i]] 表示需要i位的值

    public int kSum(int[] A, int k, int target) {
        int result[][][] = new int[A.length + 1][k + 1][target + 1];
        for (int i = 0; i < A.length + 1; i++) {
            result[i][0][0] = 1;
        }
        for (int h = 1; h < A.length + 1 ; h++) {
            int min = Math.min(h, k);
            for (int i = 1; i <= min; i++) {
                for (int j = 1; j <= target; j++) {
                    if(j >= A[h - 1]) {
                        result[h][i][j] = result[h - 1][i][j] + result[h - 1][i - 1][j - A[h- 1]];
                    }else {
                        result[h][i][j] = result[h - 1][i][j];
                    }
                }
            }
        }
        printNums(result[A.length], k + 1, target +1);
        return result[A.length ][k][target];
    }

另外有一种比较简便的方法:
参考 https://www.jianshu.com/p/e5a6d7c356e6
不过我看不太懂怎么从3维简化成了一位。以及倒序便利。。。惭愧……

相关文章

  • K数和问题

    Leetcode上有一个系列的问题 在一个数组中找寻2个数的和值为target 在一个数组中找寻3个数的和值为ta...

  • k数和

    def kSum(self, A, k, target):n = len(A)if n <= 0 or k <= ...

  • K数和

    题目: 给定n个不同的正整数,整数k(k < = n)以及一个目标数字。 在这n个数里面找出K个数,使得这K个数的...

  • JavaScript BFPRT 算法

    BFPRT 算法 背景 在一组数中求其前 k 小的数,简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是...

  • kafka2:性能优化

    参考 kafka 技术分享 如何确定Kafka的分区数,key和consumer线程数,以及不消费问题解决 k...

  • 堆的应用

    堆排序 100个亿数中找出最小的前k个数(海量数据 Top k 问题)-->建大堆 100个亿数中找出最大的前k个...

  • lintcode k数和

    给定n个不同的正整数,整数k(k < = n)以及一个目标数字。在这n个数里面找出K个数,使得这K个数的和等于目标...

  • lintcode k数和||

    给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。在这n个数里面找出K个数,使得这K个数的和等...

  • LeetCode 215. Kth Largest Elemen

    @(LeetCode) 问题描述 找出数组中第 k 个最大的数。注意是数组排序后第 k 大的数,而不是去重后的第 ...

  • LeetCode:532. 数组中的 k-diff 数对

    问题链接 532. 数组中的 k-diff 数对[https://leetcode.cn/problems/k-d...

网友评论

      本文标题:K数和问题

      本文链接:https://www.haomeiwen.com/subject/bsrldqtx.html