算法Day4-4个数之和
来源:互联网 发布:淘宝网点旺旺没反应 编辑:程序博客网 时间:2024/05/16 10:38
题目
给定n个整数的一个数组S,S中是否有元素a,b,c,d满足 a+b+c+d = 0 ? 找出数组中所有满足加和为target的不同的三个数组合。注意:(a,b,c)中的元素必须是非降序的排列方式(即a<=b<=c)解决方案中给出的集合不能包含重复的三元组例如,给定的数组S={1 0 -1 0 -2 2},并且target = 0。解决方案集合是{-1, 0, 0, 1}{-2, -1, 1, 2}{-2, 0, 0, 2}
解析
本题其实是第一题“两数之和”的拓展,可以先获得(a+b)和(c+d)的所有可能集合S-Com,那么在S-Com上再做一遍“两数之和”,问题就解决了。 最后再将求得解的集合根据(a+b)和(c+d)与S中的映射关系还原回来即可。
下面代码并没有给出S-com与S的反映射。(ps.觉得有点繁琐,不是当前算法的重点。。。)
代码
#include<iostream>#include<vector>#include <algorithm>using namespace std;vector< vector<int> > twoSum(vector<int>&num, int target){ sort(num.begin(), num.end()); int start =0, end = num.size()-1; vector< vector<int> > result; while(start < end){ int sum = num[start] + num[end]; if(sum == target){ vector<int> solution; solution.push_back(num[start]); solution.push_back(num[end]); result.push_back(solution); start++; end--; //双指针扫描的去重 while(start<end && num[start] == num[start-1]) start++;//如果下一个元素与上一个元素相等,那么跳过 while(start<end && num[end] == num[end+1]) end--;//如果上一个元素和当前end相等,跳过这个 } else if(sum < target) start++; else end--; }//end while //下面是输出 vector< vector<int> >::iterator iter1; for(iter1 = result.begin(); iter1 != result.end(); iter1++){ vector<int> vTemp = *iter1; vector<int>::iterator iter2; for(iter2 = vTemp.begin(); iter2 != vTemp.end(); iter2++){ cout<<*iter2<<" "; } cout<<endl; } return result;}void main(){ //numbers = {1 0 -1 0 -2 2}, target = 0 int nums[] = {1,0,-1,0,-2,2}; //在这里改变数组值 vector<int> v; for(int i=0; i<6; i++){ for(int j=0; j<6; j++){ if(i != j){ v.push_back(nums[i] + nums[j]); } } } twoSum( v , 0); //调用函数,结束}
0 0
- 算法Day4-4个数之和
- 算法Day3-3个数之和最接近
- 任意10个数之和 方法4
- 两个算法--Day4
- 键盘输入N个数之和
- 最小K个数之和
- 最小k个数之和
- 最小K个数之和
- 4Sum 找4个数之和为target@LeetCode
- 300-500内的质数(素数)个数和前10个最大的质数之和算法
- NYOJ-最小K个数之和
- 678.最小K个数之和
- day4
- day4
- day4
- day4
- DAY4
- DAY4
- SpringMVC + ueditor + 七牛 实现富文本文件上传功能
- 群消息这么复杂,怎么能做到不丢不重?
- redisTemplate的有序集合(zset)实例
- view-DrawerLayout 笔记
- RxJava简介
- 算法Day4-4个数之和
- C++读写二进制文件
- 重复执行粘帖-回车操作
- ImportError: No module named spiders
- 【备忘】老罗Android开发视频教程[共9大知识点] 下载
- java关键字含义
- linux 内核学习
- 高斯模糊工具类
- mongodb连接池