• 剑指 Offer II 007. 数组中和为 0 的三个数


    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。

    示例 1:

    输入:nums = [-1,0,1,2,-1,-4]
    输出:[[-1,-1,2],[-1,0,1]]
    示例 2:

    输入:nums = []
    输出:[]
    示例 3:

    输入:nums = [0]
    输出:[]
     

    提示:

    0 <= nums.length <= 3000
    -105 <= nums[i] <= 105

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/1fGaJU
    题解:

    思路挺简单:排个序,固定一个数,然后双指针找另外两个数。但是去重很关键!!

    俺卡了好一会

    去重:

    1对固定的数,去重 

    if (k!=n-1&&nums[k]==nums[k+1]) continue;

    2.对两个移动的指针,相同数也要去重

     while(i<j&&nums[j]==nums[j-1]) j--; j--;
     while(i<j&&nums[i]==nums[i+1]) i++; i++;
    3.对vector 排序
    sort(nums.begin(),nums.end(),less<int>());//升序
    sort(nums.begin(),nums.end());//默认降序

    4.对二维vector定义和插数

    vector<vector<int>> res;
    res.push_back({nums[i],nums[j],nums[k]});
     
    完整代码如下:
     1 class Solution {
     2 public:
     3     vector<vector<int>> threeSum(vector<int>& nums) {
     4          vector<vector<int>> res; 
     5          int n=nums.size();
     6          if(n<3) return {};
     7          sort(nums.begin(),nums.end(),less<int>());//升序
     8          for(int k=n-1;k>1;k--)
     9          {
    10             if (k!=n-1&&nums[k]==nums[k+1]) continue;
    11             int target=-nums[k];
    12             for(int i=0,j=k-1;i<j;)
    13             {
    14                 int now=nums[j]+nums[i];
    15                 if(now==target)
    16                 {
    17                     res.push_back({nums[i],nums[j],nums[k]});
    18                     while(i<j&&nums[j]==nums[j-1]) j--; j--;
    19                     while(i<j&&nums[i]==nums[i+1]) i++; i++;
    20                 }
    21                 else if(now>target) j--;
    22                 else i++;       
    23             }
    24             
    25          }
    26          return res;
    27     }
    28 };
  • 相关阅读:
    F
    E
    网上见到一同行发的隐私政策 备以后用
    Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    mark
    转 随机数问题
    随机不同的数
    转 基于Quick-cocos2dx 2.2.3 的动态更新实现完整篇。(打包,服务器接口,模块自更新
    字符串
    关于cmbiling.jar cocos2dx的问题
  • 原文地址:https://www.cnblogs.com/sylvia1111/p/15714733.html
Copyright © 2020-2023  润新知