Leetcode:2Sum,3Sum
来源:互联网 发布:淘宝网店客服工作手册 编辑:程序博客网 时间:2024/04/28 16:39
1. 2Sum:等于某值result的结合(a,b)
- 首先将数值进行排序,然后使用两个指针p1,p2,p1指向头,p2指向尾,然后求和比较,如果大于result,则p2--,如果小于result,则p1++,否则p1和p2所指的值即为所求;时间复杂调度:O(nlogn)
2.3Sum (数组里面的元素可以不连续)
- 第一个问题:将其进行转换成2Sum。取第一个值count,则后面的值其和加起来为:-count;
- 第二个问题:去除重复的组。如果后面那个值和前面一个值相等,则终止该次循环,进入下一次,2Sum的处理同上;
vector<vector<int> > threeSum(vector<int> &num) {sort(num.begin(), num.end() );vector<int> temp;vector<vector<int> > result;vector<int>::iterator iter=num.begin();if(num.size()<3) //error1:输入就明显不合要求 []return result;for(; iter!=num.end()-2; iter++){if(iter!=num.begin() && *(iter-1) == *iter) //去重:因为相同的数字,得到的组合是一样的continue;vector<int>::iterator iter1=iter+1, iter2=num.end()-1;int count = (-1)*(*iter);while(iter1 < iter2){if(iter1!=iter+1 && *(iter1-1) == *iter1)<span style="font-family: Arial, Helvetica, sans-serif;">//去重:因为相同的数字,得到的组合是一样的</span>{iter1++; //error2:要想后走一位 [-1,-1,-1,1]continue;}if((*iter1+*iter2) == count){temp.push_back(*iter);temp.push_back(*iter1);temp.push_back(*iter2);result.push_back(temp);temp.clear();iter1++;iter2--;}else if((*iter1+*iter2) > count)iter2--;elseiter1++;}}}
3.3Sum closest to target
- 思路同2,但是需要将三个数之和与target进行比较,如果大,需要将和变小,右指针向前移动;如果小,需要将和变大,左指针向后移动;如果等于,则直接返回;中途用一个值来保存
//题目可以假设只有一种结果int threeSumClosest(vector<int> &num, int target) {if(num.size()<3) return accumulate(num.begin(), num.end(),0);sort(num.begin(), num.end());vector<int>::iterator iter = num.begin();int result = *iter + *(iter+1) + *(iter+2); //初始化for( ; iter!=num.end()-2; iter++){vector<int>::iterator iter1=iter+1, iter2 = num.end()-1;while(iter1<iter2){int sum = *iter + *iter1 + *iter2;if(abs(sum-target) < abs(result-target)){result = sum;if(sum == target)return sum;}if(sum>target) //目的是接近targetiter2--;else if(sum<target)iter1++;elsereturn result;}}return result;}
0 0
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- Leetcode:2Sum,3Sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- 【Leetcode】3Sum (Sum)
- [Leetcode] #1#15#18 2Sum & 3Sum & 4Sum
- [LeetCode] 2Sum, 3Sum, 4Sum小结
- 【Leetcode】3Sum Closest (Sum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- [leetcode] 求和问题总结(2Sum, 3Sum, 4Sum, K Sum)
- 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
- 习题3.5求角度的正弦值
- ubuntu,deepin等linux的局域网共享——菜鸟学习linux
- Linux指令中英文解——希望通过本文不断收集整理linux英文命令,让人见文知意
- leetcode:Pascal's Triangle II
- Mule ESB 学习笔记(3)
- Leetcode:2Sum,3Sum
- 连接两个矩阵
- C语言_函数
- 机器人开发软件概述更新版
- HTML编程
- LINQ之路18:LINQ to XML之导航和查询
- vim常用插件
- 平滑滤波器的演化
- CMyString