解决2sum问题
来源:互联网 发布:腾讯云域名转入 编辑:程序博客网 时间:2024/06/06 18:36
1、题目
给定一个数组和目标值,求数组中所有相加结果等于目标值的数字组合
2、解法1
首先对数组元素排序,如果希望结果中的解没有重复的,则去除数组中重复的元素,设置两个指针从数组的两端向中间遍历,如果相加结果等于目标值,则指针所指位置即为解,如果结果大于目标值,则右指针左移,否则左指针右移;2sum的算法复杂度是O(N log N) 因为排序用了N log N以及头尾指针的搜索是线性的,所以总体是O(N log N),代码(c++)如下:
#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){ int n; cin >> n; vector<int> v(n); for(int i=0; i<n; i++) cin >> v[i]; int target; cin >> target; sort(v.begin(), v.end()); //如果有重复元素,可能会出现重复解,需要去除重复解的话在这里去除数组中重复的元素 int cur=0; for(int i=1; i<n; i++) if(v[cur] != v[i]) v[++cur]=v[i]; n = ++cur; //到这里,数组中已经没有重复的元素 int temp_sum; for(int i=0, j=n-1; i<=j;){ temp_sum = v[i] + v[j]; if(temp_sum == target){//相等,i,j为一组解,输出下标 cout << v[i] << " " << v[j] << endl; i++, j--; }else if(temp_sum > target){//大于target,j左移 j--; }else{//小于target,i右移 i++; } } return 0;}
3、解法2(hashmap)
可以将输入的数据存储在map中,遍历map,如果target-map[i]的值在map中存在,则存在解。时间复杂度为O(n)。
“`
0 0
- 解决2sum问题
- *LeetCode 3sum 3sum-closest 4sum k-sum类型 总结【待解决证明问题】
- mysql sum count 解决 null 问题
- 2sum问题和3sum问题
- 2-Sum问题
- 2-sum问题
- 2-sum问题
- 2-sum问题
- 2sum/3sum/ksum 问题
- 2Sum/3Sum/3SumClosest/4Sum系列问题
- 2sum,3sum,4sum问题总结
- 2Sum,3Sum,4Sum问题总结
- 【算法】2SUM/3SUM/4SUM问题
- 解决mysql sum求和返回null问题或IFNULL应用
- JPQL里解决SUM会返回空指针的问题
- 解决数据库查询时Null的问题(如SUM函数)
- 2sum问题经典解答
- Leetcode之2Sum问题
- 3.2 仿射变换
- 嵌入式GUI之uGFX实例之基本画点画直线
- CSS样式基本知识
- [Python标准库]random——伪随机数生成器
- 3.4Javascript函数-带参数的函数
- 解决2sum问题
- 通过init.rc中的property实现动态控制service的开启与关闭
- <五大经典算法> 四、回溯法
- 文件二进制上传图片
- 第二十二讲项目四 分支嵌套流程图2-五级成绩
- ViewDragHelper的学习
- 飘逸的python
- js生成带有图片logo的二维码:
- dom04动态创建createElement