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

三数之和~

三数之和本题题意可以看作i<j<k所以遍历数组时候选中一个数,另外两个数用双指针算法进行求解

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>>ans;
        
        for(int i=0;i<nums.size()-2;i++)//遍历i,本题i<j<k,所以仅需遍历到num.size()-2
        {
            int x=nums[i];
            if(i&&x==nums[i-1])continue;//防止找到重复的组合,因为前一个i已经找到了但是后一个相同就重复了
            if(x+nums[i+1]+nums[i+2]>0)break;//因为排序过了如果x+最小的两个都比0大那么后面就不可能有=0的了
            if(x+nums[nums.size()-1]+nums[nums.size()-2]<0)continue;//这个和break有区别,但是本意和上面的差不多
            int j=i+1,k=nums.size()-1;//双指针
            while(j<k)
            {
                int s=x+nums[j]+nums[k];
                if(s>0)k--;
                else if(s<0)j++;
                else//这个else就是三数之和为0
                {
                    ans.push_back({x,nums[j],nums[k]});//加入ans
                    for (j++; j < k && nums[j] == nums[j - 1]; j++); // 和第一个if同样的意思
                    for (k--; k > j && nums[k] == nums[k + 1]; k--); // 和第一个if同样的意思


                }
            }
        }
        return ans;
    }
};


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

相关文章:

  • 快手,蓝禾,得物,优博讯,三七互娱,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮25届春招内推
  • std::string的模拟实现
  • Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(三)
  • 数据结构与算法:希尔排序
  • HTML 编辑器推荐与 VS Code 使用教程
  • springcloud智慧工地物联网云管理系统源码
  • LeetCode 双指针章节
  • 最新的前端场景面试题
  • 无显示器安装访问树莓派3B+
  • 【C#】async与await介绍
  • vue实现日历签到效果
  • C# foreach中获取循环索引的4种方式
  • 【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】
  • unity调用本地部署deepseek全流程
  • 函数扩展【ES6】
  • Manus AI 全球首款通用型 Agent,中国制造
  • 极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【一】
  • MATLAB中startsWith函数用法
  • 面试基础---Redis 延迟队列深度解析
  • ssm_mysql_暖心家装平台