当前位置: 首页 > news >正文

【三数之和】python,排序+双指针

暴力搜索3次方的时间复杂度,大抵超时

遇到不会先排序

排序+双指针

上题解

照做

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:res=[]n=len(nums)#排序降低复杂度nums.sort()k=0#留两个位置给双指针i,jfor k in range(n-2):if nums[k]>0:break#比较其和前一个元素是否相等,相等则跳过(防止重复)if k>0 and nums[k]==nums[k-1]:continuei=k+1j=n-1while i<j:sum=nums[k]+nums[i]+nums[j]if sum<0:i+=1#同样的结果了while i<j and nums[i]==nums[i-1]:i+=1elif sum>0:j-=1#一样while i<j and nums[j]==nums[j+1]:j-=1else:res.append([nums[k],nums[i],nums[j]])i+=1j-=1#samewhile i<j and nums[i]==nums[i-1]:i+=1while i<j and nums[j]==nums[j+1]:j-=1return res

过 

 

总结:

  1. 数组排序
  2. 固定一个数,开始双指针,第一个指针紧随其后,第二个指针逆序
  3. 剪枝包括与前面的元素相比有没有相同,相同则跳过
  4. 每次移动i/j都可以考虑刚刚那步的剪枝 

 

 

http://www.lryc.cn/news/355196.html

相关文章:

  • TCP通信实现(服务端与客户端)
  • 安装appium自动化测试环境,我自己的版本信息
  • 【讲解下Web前端三大主流的框架】
  • 视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍
  • markdown画时序图的时候,如何自动显示每一条时序的序号
  • 朴素贝叶斯
  • 【软件设计师】——10.面向对象技术
  • 唐山无人机航拍,唐山无人机建模,唐山数据孪生
  • vue中分页查询的实现
  • 类 和 对象(二)
  • buu[HCTF 2018]WarmUp(代码审计)
  • 力扣爆刷第145天之图论五连刷(dfs和bfs)
  • Host头攻击-使用加密和身份验证机制
  • 衍生品赛道的 UniSwap:SynFutures 或将成为行业领军者
  • TypeScript中的`let`、`const`、`var`区别:变量声明的规范与实践
  • 【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)
  • Python限制输入的数范围
  • postman都有哪些功能?
  • 华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置
  • ROS for LabVIEW:实现LabVIEW与ROS的无缝集成
  • yolov8+ROS+ubuntu18.04——学习记录
  • Java小抄(一)|Java中的List与Set转换
  • 【每日随笔】小人畏威不怀德 , 君子畏德不畏威 ( 先礼后兵 )
  • 不一样的2024
  • linux mv操作和cp操作
  • 第十二届蓝桥杯物联网试题(国赛)
  • 小而美的前端库推荐
  • 【LeetCode】力扣第 399 场周赛 优质数对的总数 II
  • YOLOv8+PyQt5面部表情检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)
  • ROS 工作空间