[LeetCode] 15. 3Sum
时间:2019-11-11
本文章向大家介绍[LeetCode] 15. 3Sum,主要包括[LeetCode] 15. 3Sum使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
三数之和。题意是给一个input数组,请问是否能找到这样的组合使得a + b + c = 0?输出所有这样的[a, b, c]组合。例子,
Example:
Given array nums = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
还是two sum的思路,双指针从两边往中间逼近。因为和是0,所以可以先固定a的位置,然后找是否有b + c = 0 - a的组合。首先需要对数组排序,然后在执行过程中需要排除一些重复数字,避免最后的output有重复。同时,在遍历a的范围的时候,如果a > 0就可以直接跳过了,因为数组是排序过的,如果a大于0,b,c也必定大于0。
时间O(n^2)
空间O(n) - output
1 /** 2 * @param {number[]} nums 3 * @return {number[][]} 4 */ 5 var threeSum = function(nums) { 6 const res = []; 7 let left, right, sum; 8 nums.sort((a, b) => a - b); 9 for (let i = 0; i < nums.length - 2; i++) { 10 if (nums[i] > 0) break; 11 if (nums[i] === nums[i - 1]) continue; 12 left = i + 1; 13 right = nums.length - 1; 14 sum = 0 - nums[i]; 15 while (left < right) { 16 if (nums[left] + nums[right] === sum) { 17 res.push([nums[i], nums[left], nums[right]]); 18 while (left < right && nums[left] === nums[left + 1]) { 19 left++; 20 } 21 while (left < right && nums[right] === nums[right - 1]) { 22 right--; 23 } 24 left++; 25 right--; 26 } else if (nums[left] + nums[right] < sum) { 27 left++; 28 } else { 29 right--; 30 } 31 } 32 } 33 return res; 34 };
原文地址:https://www.cnblogs.com/aaronliu1991/p/11834273.html
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
- element-ui el-input只显示下划线
- 怎样去阅读源码,这篇文章值的你一读
- HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
- Mybatis 3 配置 Log4j
- 基于Three.js的360度全景--photo-sphere-viewer--简介
- MyBatis3-配置使用log4j输出日志
- nginx支持跨域访问
- nginx静态资源文件无法访问,403 forbidden错误
- vue.js如何在标签属性中插入变量参数
- SpringBoot解决ajax跨域问题
- WebBrowser(IE) 与 JS 相互调用
- HOSTS配置问题导致集群异常故障分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 作用域和作用域链的简单理解
- 如何在js中创建对象
- 如何理解JavaScript中的this
- 学习Matplotlib看这一份笔记就够了!
- 6个提升效率的pandas小技巧
- 手把手教你用Python+Pyecharts让微博热搜榜动起来
- JS继承
- call,apply,bind 的完全实现和理 解
- js构造函数的理解
- 实战 | PyQt5制作雪球网股票数据爬虫工具
- 别再问我Python怎么操作Word了!
- Vaex :突破pandas,快速分析100GB大数据集
- 【适合收藏】为了多点时间陪女朋友,我向BAT大佬跪求了这15条JS技巧
- Flask框架教程汇总(1)---视图/重定向/传参
- OkHttp请求耗时统计