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

Leetcode—15.三数之和【中等】

2023每日刷题(四十一)

Leetcode—15.三数之和

在这里插入图片描述

实现代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        int i, j, k;
        int s, pre;
        int len = nums.size();
        for(i = 0; i < len - 2; i++) {
            if(i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            pre = nums[i];
            j = i + 1;
            k = len - 1;
            while(j < k) {
                s = pre + nums[j] + nums[k];
                if(s > 0) {
                    k--;
                } else if(s < 0) {
                    j++;
                } else {
                    vector<int> tmp;
                    tmp.push_back(pre);
                    tmp.push_back(nums[j]);
                    tmp.push_back(nums[k]);
                    ans.push_back(tmp);
                    j++;
                    while(j < k && nums[j] == nums[j - 1]) {
                        j++;
                    }
                    k--;
                    while(j < k && nums[k] == nums[k + 1]) {
                        k--;
                    }
                }
            }
        }
        return ans;
    }
};

运行结果

在这里插入图片描述

优化版本

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        int i, j, k;
        int s, pre;
        int len = nums.size();
        for(i = 0; i < len - 2; i++) {
            pre = nums[i];
            if(i > 0 && pre == nums[i - 1]) {
                continue;
            }
            if(pre + nums[i + 1] + nums[i + 2] > 0) {
                break;
            }
            if(pre + nums[len - 1] + nums[len - 2] < 0) {
                continue;
            } 
            j = i + 1;
            k = len - 1;
            while(j < k) {
                s = pre + nums[j] + nums[k];
                if(s > 0) {
                    k--;
                } else if(s < 0) {
                    j++;
                } else {
                    vector<int> tmp;
                    tmp.push_back(pre);
                    tmp.push_back(nums[j]);
                    tmp.push_back(nums[k]);
                    ans.push_back(tmp);
                    j++;
                    while(j < k && nums[j] == nums[j - 1]) {
                        j++;
                    }
                    k--;
                    while(j < k && nums[k] == nums[k + 1]) {
                        k--;
                    }
                }
            }
        }
        return ans;
    }
};

运行结果

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!


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

相关文章:

  • OpenStack API 来创建用户
  • 高德地图美食
  • Kafka日志记录
  • 用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
  • 详解数据字典及其主要条目
  • 算法笔记:Day-09(初始动态规划)
  • Attacking Fake News Detectors via Manipulating News Social Engagement(2023 WWW)
  • 黑马程序员索引学习笔记
  • PTA:猜帽子游戏 ,C语言
  • open与openat的区别
  • Linux uname命令教程:如何打印linux操作系统名称和硬件的基本信息(附实例教程和注意事项)
  • SCI的写作前提——认识论文的本质
  • Python+requests+Jenkins接口自动化测试实例
  • linux查询某个进程使用的内存量
  • 复位电路的电阻电容的作用
  • 如何设置Linux终端提示信息
  • Qt 信号与槽简介
  • 案例:某电子产品电商平台借助监控易保障网络正常运行
  • unity shaderGraph实例-可交互瀑布
  • C++ day45 爬楼梯 零钱兑换 完全平方数
  • 大数据基础设施搭建 - Sqoop
  • AI搜索相关性在网站和APP上的应用
  • 致远M3 反序列化RCE漏洞复现(XVE-2023-24878)
  • C++算法入门练习——数据流第K大元素
  • JavaWeb | JSP访问数据库、JDBC操作
  • 学习计划计划执行记录