c_cpp 15. 3Sum- Med - 2018.11.1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 15. 3Sum- Med - 2018.11.1相关的知识,希望对你有一定的参考价值。

class Solution {
public:
    // 快排
    void sort(vector<int>& nums, int left, int right) {
        if (left >= right) {
            return;
        }
        int i = left;
        int j = right;
        int tmp = nums[left];
        while (i < j) {
            // j找小于tmp的数
            while (nums[j] >= tmp
                   && i < j) {
                j--;
            }
            // i找小于tmp的数
            while (nums[i] <= tmp
                   && i < j) {
                i++;
            }
            // i和j的值互换
            if (i < j) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
        }
        nums[left] = nums[i];
        nums[i] = tmp;
        sort(nums, left, i-1);
        sort(nums, i+1, right);
    }
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> re;
        map<string, int> reHash;
        int left = 0;
        int right = 0;
        int target;
        sort(nums, 0, nums.size()-1);
        for (int i = 0; i < nums.size(); i++) {
            left = i + 1;
            right = nums.size()-1;
            target = nums[i]*(-1);
            while (left < right) {
                if (nums[left] + nums[right] == target) {
                    vector<int> tmpVec{nums[i], nums[left], nums[right]};
                    string hash = to_string(nums[i]) + '#' + to_string(nums[left]) + '#' + to_string(nums[right]);
                    if (reHash[hash] != 1) {
                        re.push_back(tmpVec);
                        reHash[hash] = 1;
                    }
                    left++;
                    right--;
                } else if (nums[left] + nums[right] > target) {
                    right--;
                } else {
                    left++;
                }
            }
        }
        return re;
    }
};

以上是关于c_cpp 15. 3Sum- Med - 2018.11.1的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 15. 3Sum

c_cpp 5.最长的回文子串 - Med - 2018.10.15

c_cpp 18. 4Sum- Med - 2018.11.6

c_cpp 8.字符串到整数atoi - Med - 2018.10.29

15 & 16. 3Sum & 3Sum Cloest

c_cpp [阵] 3sum最近。给定n个整数的数组S,在S中找到三个整数,使得总和最接近给定数字target。 Retur