admin管理员组文章数量:1794759
LintCode
LintCode -- k-sum(k数和)
原题链接:/
给定n个不同的正整数,整数k(k < = n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,求问有多少种方案?
您在真实的面试中是否遇到过这个题? Yes 样例给出[1,2,3,4],k=2, target=5,[1,4] and [2,3]是2个符合要求的方案
分析:
利用二维数组,像纸币面额问题一样,递归关系:dp[ y ][ z ] += dp[ y-1 ][ z-A[x] ] ,dp[ y ][ z ]代表 y 个数之和为 z 的方案个数。
**** 时间复杂度 O(n*k*target), 空间复杂度 O(k*target)****
代码(C++、Java、Python):
class Solution {
public:/*** @param A: an integer array.* @param k: a positive integer (k <= length(A))* @param target: a integer* @return an integer*/int kSum(vector<int> A, int k, int target) {// wirte your code here T(n, k, target) = O(n*k*target). area(n, k, target) = O(k*target)int n = A.size();int dp[k+1][target+1];memset(dp, 0, sizeof(dp));dp[0][0] = 1;for (int x = 0; x < n; x++)for (int y = k; y >= 1; y--)for (int z = target; z >= A[x]; z--)dp[y][z] += dp[y-1][z-A[x]];return dp[k][target];}
};
public class Solution {/*** @param A: an integer array.* @param k: a positive integer (k <= length(A))* @param target: a integer* @return an integer*/public int kSum(int A[], int k, int target) {// write your code here T(n, k, target) = O(n*k*target). area(n, k, target) = O(k*target)int n = A.length;int [][] dp = new int [k+1][target+1];dp[0][0] = 1;for (int x = 0; x < n; x++)for (int y = k; y >= 1; y--)for (int z = target; z >= A[x]; z--)dp[y][z] += dp[y-1][z-A[x]];return dp[k][target];}
}
class Solution:"""@param A: An integer array.@param k: a positive integer (k <= length(A))@param target: integer@return an integer"""def kSum(self, A, k, target):# write your code here T(n, k, target) = O(n*k*target). area(n, k, target) = O(k*target)n = len(A)dp = [[0 for z in range(target+1)] for y in range(k+1)]dp[0][0] = 1for x in range(n):for y in list(reversed(range(1, k+1))):for z in list(reversed(range(A[x], target+1))):dp[y][z] += dp[y-1][z-A[x]]return dp[k][target]
本文标签: LintCode
版权声明:本文标题:LintCode 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1701934517a445825.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论