LeetCode9 3Sum

1、题目描述
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
2、解题思路
首先将乱序的数组进行排序;
遍历数组的每一个元素;
然后利用上一篇博客TwoSum中的思想,在i之后的元素中寻找是否存在两个元素和为nums[i]的相反数。
3、实现代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
      auto n=nums.size();
      for(int i =0 ; i< n-1; ++i) { 
        for(int j = 0; j < n-i-1; ++j) {  
            if(nums[j] > nums[j+1])  
            {  
                int tmp = nums[j] ; nums[j] = nums[j+1] ;  nums[j+1] = tmp; 
            }  
        }
      }//bubblesort of nums including resorting of index
      vector<vector<int>>  a;
      for(int i=0;i<n/2;i++){
      int j=i+1,k=n-1;
      int target=0-nums[i];
      while(j<k){
          int sum=nums[j]+nums[k];
          if(sum<target)
              j++;
          else if(sum>target)
              k--;
          else{
              vector<int> b{nums[i],nums[j],nums[k]};
              cout<<i<<j<<k<<endl;
              a.push_back(b);
              break;
          }
      }
      }
      return a;

    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值