leetcode M015
三数之和解法的本质就是暴力循环

方法一、纯暴力

原始的暴力循环N^3时间复杂度,代码如下:
很显然超时了

    def threeSum(self, nums: List[int]) -> List[List[int]]:n = len(nums)ans = []if n<3:return []for i in range(n-2):for j in range(i+1, n-1):for k in range(j+1, n):if nums[i]+nums[j]+nums[k]==0:temp = [nums[i],nums[j], nums[k]]temp.sort()if temp not in ans:ans.append(temp)return ans

方法二、暴力优化

剩下的核心在于怎么把不需要的重复的循环遍历去除掉,官方的解法就是先把原来的数组排个序,再从头遍历,去除重复的方式是双指针,一个从头走一个从尾走,指针碰到一样的直接跳到下一个,代码如下:

 def threeSum(self, nums: List[int]) -> List[List[int]]:n = len(nums)if n<3:return []ans = []nums.sort()for i in range(n):if nums[i]>0:return ans#  注意i==0的时候不能跳#  这一步是最难理解的,为什么i也可以跳#  这是因为i如果重复的情况上一个循环已经出现过了if i!=0 and nums[i]==nums[i-1]:continuel = i+1r = n-1while l<r:if nums[i]+nums[l]+nums[r]==0:ans.append([nums[i],nums[l],nums[r]])while l<r and nums[l]==nums[l+1]:l += 1while l<r and nums[r] == nums[r-1]:r -= 1l += 1r -= 1elif nums[i]+nums[l]+nums[r]<0:l += 1else:r -= 1return ans

上面说的为什么i也可以跳,因为如果出现 -1 -1 2 这样的情况,我怕如果i指向第一个-1,下一次i会直接蹦到2,不经过第二个-1可能会漏掉某些答案,事实上这是不可能的,因为第一个循环时l指针会走过第二个-1

不要总是再脑子里面瞎几把想一些根本不存在的情况!

什么情况下会用到双指针:
当我们需要枚举数组中的两个元素,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法

leetcode三数之和 M015相关推荐

  1. LeetCode 三数之和 — 优化解法

    LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...

  2. Leetcode 三数之和

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

  3. leetcode ---- 三数之和

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

  4. leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和

    题目如下: 题目 这道题可以用排一些特殊情况,减少计算量, 参考代码如下: class Solution: def threeSumClosest(self, nums, target): " ...

  5. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

  6. LeetCode实战:最接近的三数之和

    题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...

  7. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

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

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

  9. Leetcode python《热题 HOT 100》15. 三数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...

最新文章

  1. 周围剃光头顶留长发型_为什么很多秃头的人,宁愿周围留一圈头发,也不愿剃成光头?...
  2. [Protobuf] Mac系统下安装配置及简单使用
  3. javascript,jquery 操作 dropdownlist ,select
  4. 字节跳动EB级HDFS的七年演进与实践
  5. zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)
  6. MySQL数据技术嘉年华,带你深入MySQL的世界
  7. CSDN 原力计划之最具技术影响力企业博客英雄榜 发布!
  8. [2003] Can't connect to MySQL server on 'localhost' (13) 错误解决方法 【主要是linux下php连接不上mysq时】...
  9. Android 11 第三个开发者预览版发布,新增无线调试功能
  10. 服务器子接口配置的几种方式:子接口模式、vlan模式
  11. java8steam流 filler_做有机硅,不懂英文哪能行?——赶紧收藏,说不定哪天就用到了!...
  12. [树莓派][GPIO][风扇][断点直播]树莓派4B加装风扇并实现风力和CPU温度控制
  13. Semi-continuity
  14. c语言万年历怎么加节日,C语言万年历
  15. android4.4 音量控制,android4.4调整音量调节速度
  16. Kubernetes 学习总结(3) Manifests
  17. 软件工程-第五章-总体设计
  18. 成长笔记4:教育是什么
  19. 哔哩大学计算机学院跟着B站学C语言
  20. 计算机驱动空间不够,为何我的电脑在安装显卡驱动的时候就是安装不成功,提示是磁盘空间不足,但是其余的磁盘都有130GB左右...

热门文章

  1. android跳转到像限设置界面,时间管理四象限法则 ToDo5.3 for Android体验
  2. Codeforces Round #530 (Div. 1) C. Construct a tree 想法
  3. 鹏博士100万“贱卖”长城宽带:摆脱巨亏“拖油瓶”,寻求轻资产转型
  4. office移动端_微软office三合一与wps office对比测评:谁才是移动办公王者?
  5. 30个实用的Linux find命令示例
  6. 童年不止回忆,京东这波回忆杀帮你重新找回热血
  7. 程序员版“我不是药神”:求求领导,别再追查假简历了
  8. 在Mac下使用反编译工具
  9. 8种IO口模式的配置(复制粘贴的,供自己学习的)
  10. map集合遍历 java_Java Map集合遍历