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

【LeetCode】每日一题:三数之和

解题思路

最开始是打算沿着二数之和的思路做,即固定了最大的,然后小的开始遍历,因为这种遍历方式只需要遍历一轮就能完成,所以复杂度应该是O(n2),但是最后几个示例还是超时了,可能进一步优化还是可以做的。但是事实上,我最开始就在寻找一个能够约束剩余两个变量的方法,因为不重复我们可以添加大小关系的假设,但是脑子里一直是两个指针在一个遍历中移动所以没搞出来。事实上是,一个变量变大,另一个变量的上限减小,可以基于这个想法做。

未AC代码,最后样例超时

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:def get_res(index, k):disk = {}res = []for i, n in enumerate(nums[:index]):if n <= - k // 2:if n == -k // 2 and n in disk and n + n + k == 0:res.append([n, n, k])    disk[-k - n] = ielse:if n in disk:res.append([n, - n - k, k])return resres = []nums.sort()for i in range(-1, -len(nums) - 1, -1):temp = get_res(i, nums[i])for t in temp:if t not in res:res.append(t)return res

官方题解

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:n = len(nums)nums.sort()ans = list()# 枚举 afor first in range(n):# 需要和上一次枚举的数不相同if first > 0 and nums[first] == nums[first - 1]:continue# c 对应的指针初始指向数组的最右端third = n - 1target = -nums[first]# 枚举 bfor second in range(first + 1, n):# 需要和上一次枚举的数不相同if second > first + 1 and nums[second] == nums[second - 1]:continue# 需要保证 b 的指针在 c 的指针的左侧while second < third and nums[second] + nums[third] > target:third -= 1# 如果指针重合,随着 b 后续的增加# 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if second == third:breakif nums[second] + nums[third] == target:ans.append([nums[first], nums[second], nums[third]])return ans
http://www.lryc.cn/news/386680.html

相关文章:

  • 逆风而行:提升逆商,让困难成为你前进的动力
  • 新能源汽车CAN总线故障定位与干扰排除的几个方法
  • 【涵子来信】——社交宝典:克服你心中的内向,世界总有缺陷
  • LabVIEW项目外协时选择公司与个人兼职的比较
  • 汽车电子工程师入门系列——CAN 规范系列通读
  • 泽众云真机-平台华为机型HarmonyOS NEXT系统已上线!
  • AI基础:从线性回归到梯度下降
  • AI产品经理面试
  • 二进制方式部署consul单机版
  • SpringBoot整合Quartz实现动态定时任务
  • qt 用宏控制静态接口的统一
  • pdf怎么转换成jpg,本地转换还是在线转换?
  • 【物联网】802.15.4简介
  • C++基础语法:复制构造函数,赋值构造函数及浅复制,深复制
  • 架构是怎样练成的-楼宇监控系统案例
  • valgrind使用浅谈
  • 强化学习专题:强化学习知识梳理(一)
  • 深入JVM:详解JIT即时编译器
  • ORBSLAM3_ROS_Ubuntu18_04环境搭建安装
  • 【opencv - C++ - Ubuntu】putText 显示中文最快方法
  • 百度网盘下载速度慢的解决办法
  • Python api接口 异步
  • Java 和 Kotlin 单例模式写法对比
  • 解析connectionReset异常的原因与解决方案
  • mindspore打卡第9天 transformer的encoder和decoder部分
  • Python实现IPv4地址和16进制互相转换
  • 计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验
  • 深入分析 Android BroadcastReceiver (七)
  • C++中的数据结构
  • 武汉星起航:一站式服务,助力亚马逊卖家高效运营,实现收益飞跃