题目链接:传送门

题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

暴力+Hash

把所有数字用map记录个数,然后排序,拍完序之后n²暴力枚举两个数,求第三个数在map里边 不,然后怎么判是否有重复的方法就是把三个数直接hash,总体来说就是全部暴力,稍微加了一点点剪枝然后卡过去了。

时间复杂度 n²logn

const int mod =1e9+7;
class Solution {
int hash(int x,int y,int z){long long ans =1; ans = (ans*233+x)%mod;ans = (ans*234+y)%mod;ans = (ans*235+z)%mod;return ans;
}
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());map<long long,int> have; //hashmap<int,int> m;//装个数have.clear();m.clear();vector<vector<int>> ans;for(int i=0;i<nums.size();i++)m[nums[i]]++;int n = nums.size();if(n<3) return ans;for(int i=0;i<n-2;i++){for(int j=i+1;j<n-1;j++){int x=0-nums[i]-nums[j];//枚举两个数,求第三个数if(x<nums[j]) continue;if(m[x]-(nums[i]==x)-(nums[j]==x)>0) //看第三个数在map里边不{int c=hash(nums[i],nums[j],x); //在就把三数丢到hashif(!have[c]){have[c]=1;ans.push_back({nums[i],nums[j],x});}}}m[nums[i]]--;}return ans;}
};

双指针:

确实文盲了,看题解才知道这种应该是双指针的题目,先对数组进行排序。

循环确定第一个数 i

双指针指向第一个数字后边的最小值和最大值的位置,l=i+1,r=n-1

然后判断nums[i]+nums[l]+nums[r]是否为0,若小于零,左指针右移,大于零,右指针左移

相等就是左右指针同时往里移动

再加上判重,如果存在和为0,且当前左指针和他的下一个数相同,直接把左指针右移,右指针相反的。

代码如下:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();vector<vector<int>> ans;if(n<3) return ans;sort(nums.begin(),nums.end());for(int i=0;i<n-2;i++){//剪枝if(nums[i]>0) break;if(i>0&&nums[i]==nums[i-1])continue;int l=i+1,r=n-1;while(l<r){if(nums[i]+nums[l]+nums[r]==0){while(l<r && nums[l+1]==nums[l]) l++;while(l<r && nums[r-1]==nums[r]) r--;ans.push_back({nums[i],nums[l],nums[r]});l=l+1;r=r-1;}else if(nums[i]+nums[l]+nums[r]<0)l=l+1;else r=r-1;}}return ans;}
};// -4 -1 -1 0 1 2 

Leetcode 15.三数之和 双指针 or 暴力哈希相关推荐

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

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

  2. LeetCode 15. 三数之和【双指针】

    15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...

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

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

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

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

  5. Java实现 LeetCode 15 三数之和

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

  6. LeetCode 15. 三数之和

    题目描述 15. 三数之和 思路 思路1 比较容易想到的就是,求三数之和等于0,可以等价于求两个数的和,然后看这个和的相反数是否在nums里面. 但是 T_T这样的话复杂度太高了,会超时,捂脸,最后三 ...

  7. Leetcode 15.三数之和

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

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

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

  9. 2021-5-11 Leetcode 15.三数之和

    1.1我的解法以及考虑到的几点问题 1)数组长度小于3的不用考虑,直接返回 2)暴力法:每一次查找不是自己选择的数字,看一下能否凑成零(但是这样不知道如何去重) 3)拆成一个数字+LC 1.两数之和的 ...

最新文章

  1. Android4.0 修改系统屏幕分辨率方法
  2. MIMIC 以太坊医疗项目开发(7) 医疗智能合约 sample
  3. REST设计模式简介
  4. SQL Server各个版本功能比较
  5. Sharepoint学习笔记 –架构系列—10 Sharepoint的服务器端对象模型(Server Object Model) 2.内容层次结构
  6. JDK源码解析之 Java.lang.Enum
  7. 【图解漏洞】图解跨站请求伪造(CSRF)原理
  8. sql server 加密_SQL Server 2016中的新功能–始终加密
  9. 算法不会,尚能饭否之排序——直接插入排序(Insert sort)
  10. 常用编程语言介绍及各语言特点
  11. 武汉大学计算机学院应时老师,肖春霞 - 教师简历 CV- 武汉大学计算机学院
  12. 如何解决'chromedriver' executable needs to be in PATH.的问题
  13. Temporal Action Detection with Multi-level Supervision UFA论文阅读笔记
  14. android 编译libjpeg-turbo
  15. 7-20 简单计算器
  16. Transformer15
  17. 学习 ES 的笔记、全文检索、倒排索引、Lucene、ik中文分词器、Kibana使用Dev Tools
  18. 【开源STM32自平衡小车】 教你如何自己DIY一辆双轮自平衡小车
  19. 鲁棒随机优化(Robust Stochastic Optimization)和RSOME
  20. 常用运行代码记录(控制面板,命令行等)

热门文章

  1. ImageView / Text 使用 android:state_pressed 没有效果的处理方法
  2. ProgreassBar 60秒走完,
  3. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
  4. Tomcat 调优及 JVM 参数优化
  5. 2022-2028年中国绝缘栅双极晶体管(IGBT)行业投资分析及前景预测报告
  6. input属性为number,maxlength不起作用的解决方案
  7. LaTeX技巧 twocolumn 双栏
  8. WebApi2官网学习记录---异常处理
  9. 每周四十小时,你有多少是在为自己干活?
  10. android,与PHP通信,返回JSON