1. 程式人生 > 其它 >leetcode-三數之和

leetcode-三數之和

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {

        vector<vector<int>> res;

        if(nums.size()<3)
            return res;
        sort(nums.begin(), nums.end());

        for(int i = 0; i < nums.size(); i++){
            
            
if(nums[i]>0) break; if((i-1)>=0&&nums[i] == nums[i-1]) // 後面的元素和前面的重複,直接跳過 continue; int m = i+1; int n = nums.size()-1; while(m<n){ if(nums[m]+nums[n]>(-nums[i])) n
--; else if(nums[m]+nums[n]<(-nums[i])) m++; else{ vector<int> temp; while(m<n&&nums[m+1]==nums[m]) // 右邊如果有重複元素直接左移一位 m++; while(m<n&&nums[n-1
] == nums[n]) // 左邊有重複元素直接右移一位 n--; temp.push_back(nums[i]); temp.push_back(nums[m]); temp.push_back(nums[n]); res.push_back(temp); m++; n--; } } } return res; } };