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

[补题记录]Leetcode 15. 三数之和

传送门:三数之和

思路

为了去重,需要先排序。

排序之后,显然每一个 n u m s [ i ] nums[i] nums[i] 就可以作为三数之中的第一个数

因此,对于每一个 i i i,第二、三个数只能在 [ i + 1 , n ] [i + 1, n] [i+1,n] 之间取得。

这时候如果使用 map 去维护每个 nums 对应的所有下标(例如:std::map <int, std::vector<int>> mp;),实际上还是会超时。因为即使确定了第一、二个数,当查找第三个数时,哪怕用二分,都还要再乘上一个 l o g n logn logn 的复杂度。

但这也同时提醒我们,如果确定了第二、三个数,那就可以判断出 n u m s [ 2 ] + n u m s [ 3 ] nums[2] + nums[3] nums[2]+nums[3] 是大于还是小于 − n u m s [ 1 ] - nums[1] nums[1],这就意味着我们可以通过移动 2、3 指针的方式,来找到 n u m s [ 2 ] + n u m s [ 3 ] = − n u m s [ 1 ] nums[2] + nums[3] = - nums[1] nums[2]+nums[3]=nums[1] 的情况。

因此这道题可以用双指针的方式来做,还是有点难想的。

还需要额外注意 [… , a , a , …] 和 [ … , a , b , b , … ] 这两种特殊情况。

代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {std::sort(nums.begin(), nums.end());std::vector<std::vector<int>> result;for (int i = 0; i < nums.size(); ++ i) {int sum = -nums[i];// 防止 a aif (i >= 1 && nums[i] == nums[i - 1]) continue;int r = nums.size() - 1; for (int l = i + 1; l < nums.size(); ++ l) {// 防止 a b bif (l > i + 1 && nums[l] == nums[l - 1]) continue;while (r > l && nums[l] + nums[r] > sum) r--;if (l == r) break;if (nums[l] + nums[r] == sum) {result.push_back({nums[i], nums[l], nums[r]});}}} return result;}
};
http://www.lryc.cn/news/410254.html

相关文章:

  • 什么是sql注入攻击,如何预防介绍一下mysql中的常见数据类型
  • 史上最全的Seata教学并且连接springcloudAlibaba进行使用
  • InternLM Git 基础知识
  • 【Unity模型】古代亚洲建筑
  • 木马后门实验
  • 【React】useState:状态更新规则详解
  • C#中的异步编程:Task、Await 和 Async
  • SSRF-labs-master靶场
  • HBuilder X中配置vue-cli项目和UI库
  • 如何用PostMan按照规律进行循环访问接口
  • 稳态准直太阳光模拟器仪器光伏电池组件IV测试
  • vue3 reactive原理(二)-代理Set和Map及ref原理
  • Python自然语言处理库之NLTK与spaCy使用详解
  • Hive-内部表和外部表
  • Java并发编程(三)
  • Flink Doirs Connector 常见问题:Doris目前不支持流读
  • 期末复习资料——计算机系统基础
  • 一天搞定Recat(5)——ReactRouter(上)【已完结】
  • TCP/IP 网络模型详解(二)之输入网址到网页显示的过程
  • 【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法
  • SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)
  • [vue3]配置@指向src
  • 【多模态大模型】 BLIP in ICML 2022
  • Flutter开发Dart 中的 mixin、extends 和 implements
  • SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)
  • express连接mysql
  • 24暑假算法刷题 | Day24 | LeetCode 93. 复原 IP 地址,78. 子集,90. 子集 II
  • Postman本地化测试全攻略:打造多语言API的秘诀
  • 摆弄it:越走越深
  • 网页上空格