LeetCode-3Sum -三数求和-有序数组扫描
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 -三数求和-有序数组扫描相关推荐
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- LeetCode 15. 三数之和(3Sum)
15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...
- leetcode 4. 寻找两个有序数组的中位数,c语言
leetcode上第四道题,如下. 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).你可以假 ...
- Leetcode 15.三数之和
Time: 20190920 Type: Medium 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所 ...
- Leetcode 15:三数之和(最详细解决方案!!!)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. **注意:**答案中不可以包含重 ...
- Java实现 LeetCode 15 三数之和
15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...
- LeetCode 88合并两个有序数组89格雷编码
微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...
- LeetCode 15三数之和16最接近的三数之和
三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- C++leetcode找出两个有序数组的中位数(2)
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 如果不考虑复杂度的话这个题目很简单:将两 ...
最新文章
- sample 算子_Spark----RDD及算子
- UA MATH571A 检验异方差的非参数回归方法
- OpenCV中Mat属性step,step1,elemSize,elemSize1
- richTextBoxFontClass
- pandas:根据行间差值进行数据合并
- 楼宇计算机网络是如何工作的,【干货】建筑楼宇智能化如何应用 4C 技术
- ajax传值给python_ajax向python脚本传递参数
- php 返回mp3,当从PHP提供mp3时,audio.duration在Safari上返回Infinity
- 一些学习笔记和工作布置
- Mac 电脑如何对文件进行批量重命名?
- 【异常】java.lang.NoClassDefFoundError: com/lowagie/text/pdf/PdfContentByte
- 三维地震数据segy数据显示
- vue自执行函数,vue3动态组件
- Ubutun16.04安装和使用daemontools
- 2. Instructions: Language of the computer
- 【腾讯TMQ】测试建模兵器谱
- 树莓派屏幕显示No Signal
- 金蝶K3 BOM独立控制跳层开关开发
- 无光驱,硬盘安装XP完整原版
- 小白入门spring——IOC依赖注入
热门文章
- 千兆网线制作(包括交叉线)
- Mr.J-- jQuery学习笔记(十)--trigger方法详解
- 在Vue中引入Bootstrap,Font-awesome
- 主席树【bzoj3524(p3567)】[POI2014]Couriers
- asp.net webform设计思路的思考
- C# MVC 用户登录状态判断
- html5-svg和Two.js的使用方法(附案例)
- ConcurrentHashMap1.7和1.8的源码分析比较
- 糍粑大叔的独游之旅-战斗!之弹道实现(上)
- 20140704笔试面试总结(java)