zoukankan      html  css  js  c++  java
  • [LeetCode]3Sum

    题目描述:(链接)

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

    Note:

    • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
    • 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)


    解题思路:

    先对数组进行排序,然后遍历数组,左右夹逼。

    class Solution {
    public:
        vector<vector<int>> threeSum(vector<int>& nums) {
            vector<vector<int>> result;
            if (nums.size() < 3) { return result; }
            sort(nums.begin(), nums.end());
            
            auto last = nums.end();
            for (auto i = nums.begin(); i != last - 2; ++i) {
                if (i > nums.begin() && *i == *(i - 1)) { continue; }
                auto j = i + 1;
                auto k = last - 1;
                
                while (j < k) {
                    int sum = *i + *j + *k;
                    if (sum < 0) {
                        ++j;
                        while (*j == *(j - 1) && j < k) { ++j; }
                    } else if (sum > 0) {
                        --k;
                        while (*k == *(k + 1) && j < k) { --k; }
                    } else {
                        result.push_back({*i, *j, *k});
                        ++j;
                        --k;
                        while (*j == *(j - 1) && *k == *(k + 1) && j < k) { ++j; }
                    }
                }
    
            }
            
            return result;
        }
    };
    

      

  • 相关阅读:
    系统运维易忘点总结之七
    SqlServer的排序规则
    Oracle数据库用户密码过期解决
    linux 查看即时网速 /流量的工具
    NFS部署过程
    NFS 共享存储
    Rsync服务的实战
    ncRsync服务
    架构名词
    状态码
  • 原文地址:https://www.cnblogs.com/skycore/p/4853173.html
Copyright © 2011-2022 走看看