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

【力扣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;
    }
};

相关文章:

  • CrossNorm与SelfNorm的具体实现
  • 【Python】编程50个经典操作
  • 向量数据库的适用场景与局限性分析
  • R²AIN SUITE 助力医药企业服务管理数智化转型
  • jmeter 镜像构建
  • PostgreSQL: GIN 索引详解
  • 详解c++中的可调用对象,std::function、Lambda表达式、std::bind等
  • AQUA爱克泳池设备从水质安全到舒适体验,全链路护航小区泳池健康
  • npm install 卡在创建项目:sill idealTree buildDeps
  • 使用react 引入相对路径文件
  • Golang Beego SQL链式查询(包含Join关联)
  • Git 之配置ssh
  • Python与面向对象编程的七大核心概念:解析与示例
  • 一周掌握Flutter开发--8. 调试与性能优化(下)
  • 内网渗透-CS免杀与应用开发
  • 操作系统实验7 显示进程列表
  • 中科亿海微SoM模组——AI图像推理解决方案
  • 金融级密码管理器——抗内存扫描的密钥保险箱
  • 【C++】 动态内存管理
  • python中析构函数和封装
  • 杭州网站建设caiyiduo/seo是指什么
  • crazygames游戏网站/网络营销课程感悟
  • vultr 宝塔安装wordpress/南宁seo做法哪家好
  • h5手机网站发展趋势/鞍山seo优化
  • 重庆一般建一个网站需要多少钱/网络营销推广流程
  • 有那种做拼贴的网站吗/人民政府网站