Lintcode90 K Sum || solution 题解

来源:互联网 发布:美丽中国网络知识竞赛 编辑:程序博客网 时间:2024/06/06 03:14

【题目描述】

Given n unique integers, number k (1<=k<=n) and target.

Find all possible k integers where their sum is target.

给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。

在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。

【题目链接】

www.lintcode.com/en/problem/k-sum-ii/

【题目解析】

此题与Lintcode89类似。只是整数k的取值不同。

找两数之和是否为target,可以使用遍历。先来看看两数之和为target所对应的判断条件—— xi+xj=targetx_i + x_j = targetxi+xj=target, 可进一步转化为 xi=target−xjx_i = target - x_jxi=target−xj, 其中 iii 和 jjj 为数组中的下标。推理后便可将找两数之和转化为了找一个数是否在数组中。

基本思路有了,现在就来看看怎么实现,显然需要额外的空间(哈希表)来保存已经处理过的 xjx_jxj(注意这里并不能先初始化哈希表,否则无法排除两个相同的元素相加为target 的情况), 如果不满足等式条件,那么我们就往后遍历,并把之前的元素加入到哈希表中,如果target减去当前索引后的值在哈希表中找到了,那么就将哈希表中相应的索引返回即可。

【参考答案】

www.jiuzhang.com/solutions/k-sum-ii/


原创粉丝点击