https://oj.leetcode.com/problems/3sum/

先排序。然后枚举i属于[0,n-3]的这些数作为三元组的第一个数,令x=0-a[i]。这样就变成从[i+1,n)找出两个数加起来和等于x。

由于这些数是有序数,可以使用l,r指针对在两侧向中间逼近。这利用了一个事实:如果al+ar=x;对于l'<l,r'<r,则一定由al'+ar'<x。右边也是一样,所以可以这样向中间逼近的查找。

另外要注意答案需要去除重复。

typedef pair<int,pair<int,int>> scpair;
class Solution {
public:int m,n;vector<vector<int> > threeSum(vector<int> &num) {n=num.size();vector<vector<int> > res;if (n<3) return res;vector<int> &a=num;set   <scpair> st;sort(a.begin(),a.end());for (int i=0;i<n-2;i++) {scpair cr;cr.first=a[i];int l=i+1;int r=n-1;int x=0-a[i];while(l<r){int cs=a[l]+a[r];if (cs<x) l++;else if(cs>x) r--;else {cr.second.first =a[l];cr.second.second=a[r];st.insert(cr);l++;}}}for (auto it=st.begin();it!=st.end();it++) {vector<int> cur(3,0);cur[0]=it->first;cur[1]=it->second.first;cur[2]=it->second.second;res.push_back(cur);}return res;}
};

转载于:https://www.cnblogs.com/yangsc/p/4029322.html

LeetCode-3Sum -三数求和-有序数组扫描相关推荐

  1. [双指针|模拟] leetcode 15 三数之和

    [双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...

  2. LeetCode 15. 三数之和(3Sum)

    15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...

  3. leetcode 4. 寻找两个有序数组的中位数,c语言

    leetcode上第四道题,如下. 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假 ...

  4. Leetcode 15.三数之和

    Time: 20190920 Type: Medium 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所 ...

  5. Leetcode 15:三数之和(最详细解决方案!!!)

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. **注意:**答案中不可以包含重 ...

  6. Java实现 LeetCode 15 三数之和

    15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...

  7. LeetCode 88合并两个有序数组89格雷编码

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

  8. LeetCode 15三数之和16最接近的三数之和

    三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...

  9. C++leetcode找出两个有序数组的中位数(2)

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 如果不考虑复杂度的话这个题目很简单:将两 ...

最新文章

  1. sample 算子_Spark----RDD及算子
  2. UA MATH571A 检验异方差的非参数回归方法
  3. OpenCV中Mat属性step,step1,elemSize,elemSize1
  4. richTextBoxFontClass
  5. pandas:根据行间差值进行数据合并
  6. 楼宇计算机网络是如何工作的,【干货】建筑楼宇智能化如何应用 4C 技术
  7. ajax传值给python_ajax向python脚本传递参数
  8. php 返回mp3,当从PHP提供mp3时,audio.duration在Safari上返回Infinity
  9. 一些学习笔记和工作布置
  10. Mac 电脑如何对文件进行批量重命名?
  11. 【异常】java.lang.NoClassDefFoundError: com/lowagie/text/pdf/PdfContentByte
  12. 三维地震数据segy数据显示
  13. vue自执行函数,vue3动态组件
  14. Ubutun16.04安装和使用daemontools
  15. 2. Instructions: Language of the computer
  16. 【腾讯TMQ】测试建模兵器谱
  17. 树莓派屏幕显示No Signal
  18. 金蝶K3 BOM独立控制跳层开关开发
  19. 无光驱,硬盘安装XP完整原版
  20. 小白入门spring——IOC依赖注入

热门文章

  1. 千兆网线制作(包括交叉线)
  2. Mr.J-- jQuery学习笔记(十)--trigger方法详解
  3. 在Vue中引入Bootstrap,Font-awesome
  4. 主席树【bzoj3524(p3567)】[POI2014]Couriers
  5. asp.net webform设计思路的思考
  6. C# MVC 用户登录状态判断
  7. html5-svg和Two.js的使用方法(附案例)
  8. ConcurrentHashMap1.7和1.8的源码分析比较
  9. 糍粑大叔的独游之旅-战斗!之弹道实现(上)
  10. 20140704笔试面试总结(java)