天天看點

【哈希表】leetcode_15_三數之和【哈希表】leetcode_15_三數之和

【哈希表】leetcode_15_三數之和

python (自己寫的。。。逾時了。。。我好菜啊)

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        re = []
        for i in range(len(nums) - 1):
            for j in range(i+1, len(nums)):
                de = nums[:]
                de.remove(nums[i])
                de.remove(nums[j])
                k = 0 - nums[i] - nums[j]
                if k in de and sorted([nums[i], nums[j], k]) not in re:
                    re.append(sorted([nums[i], nums[j], k]))
        return re
           

c++(3指針法,去重好難啊啊啊啊,,,各種坑)

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> re;
        sort(nums.begin(),nums.end());

        for (int i = 0; i<nums.size(); i++){
           

            if (i>0 && nums[i] == nums[i-1]){
                continue;
            }

            int left = i+1;
            int right = nums.size() -1;

            while(right > left){
                if (nums[right]+nums[left]+nums[i] > 0){
                    right--;
                }
                else if(nums[right]+nums[left]+nums[i] < 0){
                    left++;
                }else{
                    re.push_back({nums[right],nums[left],nums[i]});
                    while(right>left && nums[right] == nums[right-1]) right--;
                    while(right>left && nums[left] ==nums[left+1]) left++;
                    


                    right--;
                    left++;
                }
            }

        }
        return re;
    }
};