leetcode三数之和 M015
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相关推荐
- LeetCode 三数之和 — 优化解法
LeetCode 三数之和 - 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复 ...
- Leetcode 三数之和
三数之和 题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组.注意:答案中 ...
- leetcode ---- 三数之和
1.题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包 ...
- leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和
题目如下: 题目 这道题可以用排一些特殊情况,减少计算量, 参考代码如下: class Solution: def threeSumClosest(self, nums, target): " ...
- 【LeetCode】两数之和、三数之和、四数之和系列
文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...
- LeetCode实战:最接近的三数之和
题目英文 Given an array nums of n integers and an integer target, find three integers in nums such that ...
- LeetCode实战:三数之和
题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...
- LeetCode 15三数之和16最接近的三数之和
三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- Leetcode python《热题 HOT 100》15. 三数之和
Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...
最新文章
- 周围剃光头顶留长发型_为什么很多秃头的人,宁愿周围留一圈头发,也不愿剃成光头?...
- [Protobuf] Mac系统下安装配置及简单使用
- javascript,jquery 操作 dropdownlist ,select
- 字节跳动EB级HDFS的七年演进与实践
- zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)
- MySQL数据技术嘉年华,带你深入MySQL的世界
- CSDN 原力计划之最具技术影响力企业博客英雄榜 发布!
- [2003] Can't connect to MySQL server on 'localhost' (13) 错误解决方法 【主要是linux下php连接不上mysq时】...
- Android 11 第三个开发者预览版发布,新增无线调试功能
- 服务器子接口配置的几种方式:子接口模式、vlan模式
- java8steam流 filler_做有机硅,不懂英文哪能行?——赶紧收藏,说不定哪天就用到了!...
- [树莓派][GPIO][风扇][断点直播]树莓派4B加装风扇并实现风力和CPU温度控制
- Semi-continuity
- c语言万年历怎么加节日,C语言万年历
- android4.4 音量控制,android4.4调整音量调节速度
- Kubernetes 学习总结(3) Manifests
- 软件工程-第五章-总体设计
- 成长笔记4:教育是什么
- 哔哩大学计算机学院跟着B站学C语言
- 计算机驱动空间不够,为何我的电脑在安装显卡驱动的时候就是安装不成功,提示是磁盘空间不足,但是其余的磁盘都有130GB左右...
热门文章
- android跳转到像限设置界面,时间管理四象限法则 ToDo5.3 for Android体验
- Codeforces Round #530 (Div. 1) C. Construct a tree 想法
- 鹏博士100万“贱卖”长城宽带:摆脱巨亏“拖油瓶”,寻求轻资产转型
- office移动端_微软office三合一与wps office对比测评:谁才是移动办公王者?
- 30个实用的Linux find命令示例
- 童年不止回忆,京东这波回忆杀帮你重新找回热血
- 程序员版“我不是药神”:求求领导,别再追查假简历了
- 在Mac下使用反编译工具
- 8种IO口模式的配置(复制粘贴的,供自己学习的)
- map集合遍历 java_Java Map集合遍历