15. 3Sum(字典)

时间:2021-11-02 03:34:01
Given an array nums of n integers, are there elements abc 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]
]

排序 + 双指针
本题的难点在于如何去除重复解。

算法流程:
特判,对于数组长度 nn,如果数组为 nullnull 或者数组长度小于 33,返回 [][]。
对数组进行排序。
遍历排序后数组:
若 nums[i]>0nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 00,直接返回结果。
对于重复元素:跳过,避免出现重复解
令左指针 L=i+1L=i+1,右指针 R=n-1R=n−1,当 L<RL<R 时,执行循环:
当 nums[i]+nums[L]+nums[R]==0nums[i]+nums[L]+nums[R]==0,执行循环,判断左界和右界是否和下一位置重复,去除重复解。并同时将 L,RL,R 移到下一位置,寻找新的解
若和大于 00,说明 nums[R]nums[R] 太大,RR 左移
若和小于 00,说明 nums[L]nums[L] 太小,LL 右移

 class Solution {
public:
vector<vector<int>> threeSum(vector<int>& a) {
const int n = a.size();
vector<vector<int>> res;
if (n < ) return res;
std::sort(a.begin(),a.end());
for(int i = ; i < n; ++i) {
if (i!= && a[i]==a[i-]) continue;
int low = i+;
int high = n-;
while(low < high) {
if(a[low]+a[high]>-a[i]) {
high--;
} else if(a[low]+a[high]<-a[i]){
low++;
} else {
std::vector<int> res_tmp = {a[i],a[low],a[high]};
res.emplace_back(res_tmp); while (low < high && a[low]==a[low+]) {
low++;
}
while (low < high && a[high]==a[high-]) {
high--;
}
low++;
high--;
}
}
}
return res;
}
};

借助 2sum中字典的应用。  时间复杂度 o(n**2)
 class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) < 3:
return []
nums.sort()
res = set()
for i, v in enumerate(nums[:-2]):
d = {}
for x in nums[i+1:]:
if x not in d:
d[-v-x] = 1
else:
res.add((v, -v-x, x))
return map(list, res)

15. 3Sum(字典)的更多相关文章

  1. LeetCode 15 3Sum &lbrack;sort&rsqb; &lt&semi;c&plus;&plus;&gt&semi;

    LeetCode 15 3Sum [sort] <c++> 给出一个一维数组,找出其中所有和为零的三元组(元素集相同的视作同一个三元组)的集合. C++ 先自己写了一发,虽然过了,但跑了3 ...

  2. 1&period; Two Sum&amp&semi;&amp&semi;15&period; 3Sum&amp&semi;&amp&semi;18&period; 4Sum

    题目: 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up t ...

  3. leetcode 1&period;Two Sum 、167&period; Two Sum II - Input array is sorted 、15&period; 3Sum 、16&period; 3Sum Closest 、 18&period; 4Sum 、653&period; Two Sum IV - Input is a BST

    1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...

  4. leetcode 15&period; 3Sum 二维vector

    传送门 15. 3Sum My Submissions Question Total Accepted: 108534 Total Submissions: 584814 Difficulty: Me ...

  5. 15&period; 3Sum、16&period; 3Sum Closest和18&period; 4Sum

    15 3sum Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = ...

  6. 刷题15&period; 3Sum

    一.题目说明 题目非常简洁15. 3Sum,读懂题目后,理解不难. 但 实话说,我们提交代码后,Time Limit Exceeded,最主要的是给了非常长的测试用例,我本地运行后87秒,确实时间非常 ...

  7. &lbrack;LeetCode&rsqb; 15&period; 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 ...

  8. LeetCode 15&period; 3Sum 16&period; 3Sum Closest 18&period; 4Sum

    n数求和,固定n-2个数,最后两个数在连续区间内一左一右根据当前求和与目标值比较移动,如果sum<target,移动较小数,否则,移动较大数 重复数处理: 使i为左至右第一个不重复数:while ...

  9. 15&period; 3Sum C&plus;&plus;

    参考资料: https://leetcode.com/problems/3sum/discuss/7402/Share-my-AC-C%2B%2B-solution-around-50ms-O(N*N ...

随机推荐

  1. Django中提示TemplateDoesNotExist?

    用的是1.9版本.需要在settings.py文件中设置TEMPLATES下的DIRS如下: TEMPLATES = [ { 'BACKEND': 'django.template.backends. ...

  2. python 练习 8

    #!/usr/bin/python # -*- coding: utf-8 -*- def ntom(x,size,mod): t=[0]*(size) j=0 while x and j<si ...

  3. php pdo oracle中文乱码

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PA ...

  4. POJ 2570

    思路:floyd + 位运算.map[i][j]的二进制位前26位表示i到j路径里面字母a-z的存在情况,为1说明该字母存在,为0不存在. #include<iostream> #incl ...

  5. Android Studio中Gradle使用详解

    一)基本配置 build配置 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools. ...

  6. 小型 Web 页项目打包优化方案

    背景   目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...

  7. Odoo开源智造IT经理人创业圆梦计划正式启动

    概念定义 IT经理人创业圆梦计划是什么? 甲方IT经理人的行业背景 + 其他甲方需求及可靠信任的线索资源 = 自主创业圆梦计划 具体措施 甲方IT经理人的职业行业背景取得其他甲方需求线索及信任——通过 ...

  8. springboot&plus;VUE&lpar;一&rpar;

    https://segmentfault.com/blog/wangjihong 安装nodejs与NPM 下载nodejs的LTL版本,并安装 https://nodejs.org/en/ 执行no ...

  9. 第四百零六节,自定义用户表类来继承Django的用户表类,

    第四百零六节,自定义用户表类来继承Django的用户表类, models.py from django.db import models # Create your models here. from ...

  10. 项目目前展示图 有几个Activity页还没连上不能一次展示出来