*15. 3Sum (three pointers to two pointers), hashset
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4], A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
Idea: Simplify this problem from O(n^3) to n square by using two pointers
iterate i and j = i+1 and k = n-1 (j and k are two pointers we would use)
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<List<Integer>>();
//two pointers
//set i and move j and k (if sum <0 j++ else k--)
for(int i = 0; i<nums.length; i++){
if (i != 0 && nums[i] == nums[i - 1]) continue; //*****
int j = i+1;
int k = nums.length-1;
while(j<k){
if(nums[i] + nums[j] + nums[k] == 0){
List<Integer> temp = new ArrayList<Integer>();
temp.add(nums[i]); temp.add(nums[j]);temp.add(nums[k]);
//if(!res.contains(temp)) //why add this make TLE ****
res.add(temp);
++j;
//System.out.println("wei");
while (j < k && nums[j] == nums[j-1]) ++j; ****
}else if(nums[i] + nums[j] + nums[k] < 0){
j++;
}else {
k--;
}
}
}
return res;
}
}
1.avoid the duplicate elements -1 -1 (for the same values, there are same results)
2. avoid using contains because of O(n), that is the reason why we need check the duplicate elements manually instead of using contains
Solution 2: using hashmap: n^2*lgn
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Arrays.sort(nums);
for(int i = 0; i < nums.length; i++){
if(i!=0 && nums[i-1] == nums[i]) continue;
Set<Integer> set = new HashSet<>(); // no duplicate elements
for(int j = i+1; j<nums.length; j++){// nums[j] : b and c means: count all nums[i] as c
if(set.contains(-nums[i]-nums[j])){ // c
List<Integer> temp = new ArrayList<>();
temp.add(nums[i]);temp.add(nums[j]);temp.add(-nums[i]-nums[j]);
res.add(temp);
//avoid the duplicate elemnts
++j;
while(j < nums.length && nums[j-1]==nums[j]) j++;
--j;
}
if(j<nums.length)
set.add(nums[j]);
}
}
return res;
}
}
hashset
how to using two loop to represent three numbers.
1. treat all nums[j] as c(the third elemnts)
2. As a+b+c = 0, c = -a-b, we need find a and b to satisfy the requirement
Great reference: https://fizzbuzzed.com/top-interview-questions-1/#twopointer -- speak human language nice.
*15. 3Sum (three pointers to two pointers), hashset的更多相关文章
- leetcode 15. 3Sum 二维vector
传送门 15. 3Sum My Submissions Question Total Accepted: 108534 Total Submissions: 584814 Difficulty: Me ...
- LeetCode 15 3Sum [sort] <c++>
LeetCode 15 3Sum [sort] <c++> 给出一个一维数组,找出其中所有和为零的三元组(元素集相同的视作同一个三元组)的集合. C++ 先自己写了一发,虽然过了,但跑了3 ...
- 1. Two Sum&&15. 3Sum&&18. 4Sum
题目: 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up t ...
- leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST
1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...
- 15. 3Sum、16. 3Sum Closest和18. 4Sum
15 3sum Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = ...
- 刷题15. 3Sum
一.题目说明 题目非常简洁15. 3Sum,读懂题目后,理解不难. 但 实话说,我们提交代码后,Time Limit Exceeded,最主要的是给了非常长的测试用例,我本地运行后87秒,确实时间非常 ...
- LeetCode 15. 3Sum(三数之和)
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- [leetcode]15. 3Sum三数之和
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...
- 蜗牛慢慢爬 LeetCode 15. 3Sum [Difficulty: Medium]
题目 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...
随机推荐
- sql游标及模仿游标操作
游标用途:对一个查询出来的结果,每一行作为参数进行操作 一:游标操作 --申请一个游标 DECLARE MyCursor CURSOR FOR SELECT ID FROM dbo.tb_stock ...
- esper(4-2)-Category Context
语法: create context context_name group [by] group_expression as category_label [, group [by] group_ex ...
- hadoop install start-dfs.sh 失败
linux:ubuntu 16.04 LTS hadoop version: 2.7.3 JDK: java-9-open-jdk issue: start-dfs.sh start-dfs.sh:c ...
- PIXI 写一个字及图片保存(2)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 数据结构---Java---数组
**************************************************************前言************************************ ...
- inventor怎样卸载干净
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- PlayMaker Rotate旋转
每秒 绕 Y轴 旋转 180度 ,每帧都执行. 不勾选Every Frame的话就只会旋转一帧.
- 手机缺失sqlite3时操作数据库的多种解决方案 ----adb命令科普
在Android应用开发无处不在SQLite数据库的身影.那么在开发中怎么使用adb命令操作数据库的功能呢? 下面我们将完整的介绍与数据库操作相关的命令集及当手机缺少sqlite3的时候的多种解决方案 ...
- php锁定文本框内容的方法
有时候我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如<input type="text" name="zg" value="中国& ...
- php防止重复提交问题总结
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...