首页 > 其他分享 >15. 三数之和

15. 三数之和

时间:2023-03-07 15:44:27浏览次数:26  
标签:right 15 nums int 三数 sum vector left

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

 

 1 class Solution {
 2 public:
 3     vector<vector<int>> threeSum(vector<int>& nums) {
 4         vector<vector<int>> res;
 5         sort(nums.begin(),nums.end());
 6         //对num采用三指针的方法
 7         for (int i = 0; i < nums.size()-1; i++)
 8         {
 9             if (nums[i] > 0 ) break;
10             if (i > 1 && nums[i] == nums[i - 1]) continue;
11             int left = i + 1;
12             int right = nums.size() - 1;
13             while (left < right)
14             {
15                 int sum = nums[i] + nums[left] + nums[right];
16                 if (sum < 0) left++;
17                 if (sum > 0) right--;
18                 if (sum == 0)
19                 {
20                     res.insert(res.end(), { nums[i] , nums[left] , nums[right] });
21                     while (right > left && nums[left] == nums[left + 1]) left++;
22                     while (right > left && nums[right] == nums[right - 1]) right--;
23                     left++;
24                     right--;
25                 }
26             }
27         }
28         return res;
29     }
30 };
31 
32 int main() {
33     vector<int> a = { -1,0,1,2,-1,-4 };
34     vector<vector<int>> c;
35     Solution q;
36     c = q.threeSum(a);
37     for (const auto& p : c)
38     {
39         for (const auto& q : p)
40         {
41             printf("%d\n", q);
42         }
43     }}

 

标签:right,15,nums,int,三数,sum,vector,left
From: https://www.cnblogs.com/lihaoxiang/p/17188317.html

相关文章

  • 152. Maximum Product Subarray
    #题目Findthecontiguoussubarraywithinanarray(containingatleastonenumber)whichhasthelargestproduct.Forexample,giventhearray[2,3,-2,4],t......
  • AO3415-ASEMI低压P沟道MOS管AO3415
    编辑:llAO3415-ASEMI低压P沟道MOS管AO3415型号:AO3415品牌:ASEMI封装:SOT-23最大漏源电流:-5A漏源击穿电压:-20VRDS(ON)Max:0.055Ω引脚数量:3芯片个数:沟道类型:P沟道MOS管、低压MOS管......
  • UVA-1596 找bug 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码有个点需要注意:ASCII中,在Z和a中间还有6个字符,因此数组开大一点比较好。ge......
  • UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码有意思的一个题目。书上说这是一个不错的优先队列练习题,但实际上它其实是......
  • Python 异步: 异步迭代器(15)
    动动发财的小手,点个赞吧!迭代是Python中的基本操作。我们可以迭代列表、字符串和所有其他结构。Asyncio允许我们开发异步迭代器。我们可以通过定义一个实现aiter()和......
  • 1599. 经营摩天轮的最大利润 (Medium)
    问题描述1599.经营摩天轮的最大利润(Medium)你正在经营一座摩天轮,该摩天轮共有4个座舱,每个座舱最多可以容纳4位游客。你可以逆时针轮转座舱,但每次轮转都需要......
  • P3177 [HAOI2015] 树上染色
    有一棵点数为n的树,树边有边权。给你一个在0∼n之内的正整数k,选择k个点,将其染成黑色,并将其他的n−k个点染成白色。你会获得黑点两两之间的距离加上白点两两之间的......
  • 190615小记-生活从不容易
    2019-06-15生活从不容易,这句话虽然略显俗气。换了工作已经是一个半月了,心态好像好了一些。一直想写些东西总结一下,可是思维很混乱,网站也是很久没有更新。没什么重点,......
  • linux 常用的150 个命令汇总
    1.线上查询及帮助manhelp2.文件和目录操作的命令ls cd find mkdir mv pwd renamerm rmdir touch tree basename dirname chattr lsattr file md5sum3.查看文件......
  • P1156 垃圾陷阱
    卡门――农夫约翰极其珍视的一条奶牛――已经落了到“垃圾井”中。它的深度为DD(2≤D≤100)英尺。卡门想把垃圾堆起来,等到堆得高度大等于于井的深度时,她就能逃出井外了......