LeetCode 15. 三數之和

題目描述:

給定一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合爲:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

思路:

將問題轉化爲兩數之和的思路,首先排序數組,然後依次遍歷每個數據,當遍歷到當前的數的時候,就在剩下的數中找兩數之和等於0-當前數的值


代碼:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int> > ret;
        if(nums.size()<3)
            return ret;
        
        sort(nums.begin(), nums.end());
        
        int temp_v=-1;
        for(int i=0; i<nums.size(); i++)
        {
            if(i>0 && nums[i]==nums[i-1])
                continue;

            int start=i+1;
            int end=nums.size()-1;
            int target=-nums[i];
            
            while(start<end){
                if(nums[start] + nums[end] == target){
                    vector<int> temp={nums[i], nums[start], nums[end]};
                    ret.push_back(temp);
                    while(nums[start]==nums[++start]){}
                    while(nums[end]==nums[--end]){}
                }
                else if(nums[start] + nums[end] > target)
                {
                    while(nums[end]==nums[--end]){}
                }   
                else{
                    while(nums[start]==nums[++start]){}
                }
            }
        }
        
        return ret;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章