90 k数和 II
原题网址:https://www.lintcode.com/problem/k-sum-ii/description
描述
Given n unique integers, number k (1<=k<=n) and target.
Find all possible k integers where their sum is target.
样例
给出[1,2,3,4],k=, target=,返回 [[1,4],[2,3]]
class Solution {
public:
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param target: an integer
* @return: A list of lists of integer
*/
vector<vector<int>> kSumII(vector<int> &A, int k, int targer) {
// write your code here
vector<vector<int>> result;
vector<int> cur;
int sum=;
dfsn(A,k,targer,sum,,cur,result);
return result;
}
void dfsn(vector<int> &A, int k, int targer,int sum,int ind,vector<int> cur ,vector<vector<int>> &result)
{
if (cur.size()==k&&sum==targer)
{
result.push_back(cur);
return ;
}
if (ind>=(int)A.size())
{
return ;
}
if (cur.size()>=k||sum>targer)
{
return ;
}
cur.push_back(A[ind]);
dfsn(A,k,targer,sum+A[ind],ind+,cur,result);
cur.pop_back();//去掉A[ind];
dfsn(A,k,targer,sum,ind+,cur,result);
}
};
PS:从第一个元素开始,依次拿走K个元素组成cur,每个元素只有两种情况,当前被拿到、当前没被拿到,这样就可以找到所有K个数的组合。K数和为target就push到结果中,否则废弃。
进一步剪枝优化时间复杂度,若拿到的元素和已经超过了target,可以直接废弃当前的组合。
class Solution {
public:
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param target: an integer
* @return: A list of lists of integer
*/
vector<vector<int>> kSumII(vector<int> &A, int k, int targer) {
// write your code here
vector<vector<int>> result;
vector<int> cur;
int sum=;
findk(A,k,targer,sum,,cur,result);
return result;
}
void findk(vector<int> &A, int k, int targer,int sum,int ind,vector<int> cur ,vector<vector<int>> &result)
{
if (cur.size()==k&&sum==targer)
{
result.push_back(cur);
return ;
}
if ((int)cur.size()>=k||sum>targer)
{
return ;
}
for (int i=ind;i<(int)A.size();i++)
{
cur.push_back(A[i]);
findk(A,k,targer,sum+A[i],i+,cur,result);//注意是i+1不是ind+1;
cur.pop_back();
}
}
};
90 k数和 II的更多相关文章
- lintcode 中等题:k Sum ii k数和 II
题目: k数和 II 给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字. 在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案. 样例 ...
- Leetcode 454.四数相加II
四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单 ...
- Java实现 LeetCode 454 四数相加 II
454. 四数相加 II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为 ...
- 【哈希表】leetcode454——四数相加II
编号454:四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为 ...
- 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和
第一题454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, ...
- lintcode: 三数之和II
题目 三数之和 II 给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和. 样例 例如S = . 和最接近1的三元组是 -1 + 2 + 1 = 2. 注意 ...
- lintcode-464-整数排序 II
464-整数排序 II 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法. 样例 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, ...
- 【洛谷P1288】取数游戏II
取数游戏II 题目链接 显然,由于一定有一个0,我们可以求出从初始点到0的链的长度 若有一条链长为奇数,则先手可以每次取完一条边上所有的数, 后手只能取另一条边的数,先手必胜: 反之若没有奇数链,后手 ...
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
二分.情况讨论 因为数组有序,所以能够考虑用二分.通过二分剔除掉肯定不是第k位数的区间.如果数组A和B当前处理的下标各自是mid1和mid2.则 1.假设A[mid1]<B[mid2], ①.若 ...
随机推荐
- 尚学linux课程---7、linux系统管理命令
尚学linux课程---7.linux系统管理命令 一.总结 一句话总结: 查网络:netstat -ntpl 查进程:ps 1.需要下载163yum源(从外部源同步仓库)里面的所有rpm文件? re ...
- Jan&Feb 工作总结
一.工作任务: 熟悉dcbi项目(运维经分系统),完成指定需求. 熟悉bi项目(数据分析平台),完成指定需求. steel circus 主机游戏官网制作. 一拳超人游戏预注册页wap手机端制作. 二 ...
- 《Python之BMI计算》
<Python之BMI计算> 前段时间写了个 BMI 因为刚刚开始学 有几个错误 第一个: 厘米我当时也没注意因为觉得去掉0.00的话后面1866666666是正确的BMI值 刚刚去看看去 ...
- 关于切片/截取(slice)和random模块的使用(实例:猜单词小游戏)
切片和random的使用在源码中都有注释(可以直接下载):https://github.com/NoobZeng/GuessWords 1. README.MD 基于Python的猜单词游戏 猜单词小 ...
- 普及组R4
T3 链接:C 输入一个长度为n的数组a[i],下标从0开始(0到n-1) 保证n是2的整数次幂, 对于每个i (0 <= i < n) 求所有满足((i & j) == j)的a ...
- sql 字符串连接
const string FMCG_BASH = "清除重复商品"; var sqls = new List<string>(); //// Fmcg sqls.},R ...
- CSRF spring mvc 跨站请求伪造防御(转)
CSRF CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一 ...
- windows安装apache系统中无apache2服务解决方案
一直都是用WIN开发PHP,今天有用户反映SHUGUANG CMS在APACHE+PHP中不能正常运行,只好自己机器配置个环境测试(http://xz.8682222.com)遇到点小问题,搜索相关资 ...
- thinkphp 虚拟模型
虚拟模型是指虽然是模型类,但并不会真正的操作数据库的模型.有些时候,我们建立模型类但又不需要进行数据库操作,仅仅是借助模型类来封装一些业务逻辑,那么可以借助虚拟模型来完成.虚拟模型不会自动连接数据库, ...
- 0809NOIP模拟测试赛后总结
终于有点脸单独建一个随笔写一下考试总结了…… T1一眼组合数学,推了一会儿式子发现恐怕是容斥.突然害怕,于是开始大力dp. 然后骗了70分走人hhh. T2挂了……又读错题了……以为必须相邻,然后就原 ...