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

【力扣hot100题】(005)三数之和

个人感觉这道题最大的难点在“不重复”。

一开始主要是在思考怎么实现“三指针”,后来想到可以遍历一遍数组,每一遍都当成是双指针就行了。

需要注意的是在每次遍历时一定要后移到与当前位置不相等的地方,不然就会重复。

然后对后面的数使用双指针时也要进行去重工作,在每次找到一个结果三元组后移动双指针时一定要将两个指针移动到与之前元素不等的位置,这样才能保证没有重复元素。

总之绕了不少弯路。

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(),nums.end());
        for(int i=0;i<nums.size();i++){
            int front=i+1;
            int back=nums.size()-1;
            while(front<back){
                if(nums[front]+nums[back]+nums[i]==0){
                    result.push_back(vector<int>{nums[i],nums[front],nums[back]});
                    while(front<back&&nums[front+1]==nums[front]) front++;
                    while(front<back&&nums[back-1]==nums[back]) back--;
                    front++;
                    back--;
                }
                else if(nums[front]+nums[back]+nums[i]<0) front++;
                else if(nums[front]+nums[back]+nums[i]>0) back--;
            }
            while(i+1<nums.size()&&nums[i+1]==nums[i]) i++;
        }
        return result;
    }
};


http://www.kler.cn/a/612622.html

相关文章:

  • (Kotlin)Android 自定义蓝牙扫描动画:多波浪扩散效果
  • 初阶8 list
  • [力扣每日一练]关于MySQL和pandas的正则表达式应用
  • 大文件版本管理git-lfs
  • 第 7 章 | Solidity 合约安全工具全指南:Slither、Echidna、Foundry 实战解析
  • 小程序中过滤苹果设备中的表情(即 emoji)
  • TCP 的 time_wait 有什么作用
  • React 18 核心技术深度解析:从并发渲染到异步数据流优化
  • NLP高频面试题(二十)——flash attention原理
  • vllm 离线推理Qwen2.5-VL-Instruct,API部署,支持max_pixels
  • WPF ContentPresenter详解
  • 机器人能否回到原点 - 简单
  • OpenHarmony NativeC++应用开发speexdsp噪声消除案例
  • 基于动态光影融合的缺陷实时检测和材质量化方法,并且整合EventPS、VMNer和EvDiG
  • “十五五”时期航空弹药发展环境分析
  • 【Portainer】Docker可视化组件安装
  • 人工智能与无人机:无人机的进步与应用技术详解
  • 『不废话』之大模型性能评估
  • Springboot 集成 Flowable 6.8.0
  • Linux 上使用 Docker 部署 Kafka 集群