首页 > 其他 > 详细

p102 三数之和(leetcode 15)

时间:2020-04-07 21:51:28      阅读:51      评论:0      收藏:0      [点我收藏+]

一:解题思路

Time:O(n^2),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

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

        for (int k = nums.size()-1; k >= 2; k--)
        {
            if (nums[k] < 0) break;
            int target = -nums[k];
            int i = 0, j = k - 1;
            while (i < j)
            {
                if (nums[i] + nums[j] == target)
                {
                    vector<int> elem;
                    elem.push_back(nums[i]);
                    elem.push_back(nums[j]);
                    elem.push_back(nums[k]);
                    result.push_back(elem);
                    while (i < j && nums[i] == nums[i + 1]) i++;
                    while (i < j && nums[j] == nums[j - 1]) j--;
                    i++;
                    j--;
                }
                else if (nums[i] + nums[j] < target)
                {
                    i++;
                }
                else
                {
                    j--;
                }
            }

            while (k >= 2 && nums[k] == nums[k - 1]) k--;
        }

        return result;
    }
};

 

Java:

class Solution {
        public List<List<Integer>> threeSum(int[] nums) 
        {
               List<List<Integer>> result=new ArrayList<>();
               Arrays.sort(nums);
               
               for(int k=nums.length-1;k>=2;k--)
               {
                   if(nums[k]<0) break;
                   int targrt=-nums[k];
                   int i=0,j=k-1;
                   while (i<j)
                   {
                       if(nums[i]+nums[j]==targrt)
                       {
                           result.add(Arrays.asList(nums[i],nums[j],nums[k]));
                           while(i<j && nums[i]==nums[i+1]) i++;
                           while (i<j && nums[j]==nums[j-1]) j--;
                           i++;
                           j--;
                       }
                       else if(nums[i]+nums[j]<targrt)
                       {
                           i++;
                       }
                       else
                       {
                           j--;
                       }
                   }
                   
                   while(k>=2 && nums[k]==nums[k-1]) k--;
               }
               
               return result;
        }
    }

 

p102 三数之和(leetcode 15)

原文:https://www.cnblogs.com/repinkply/p/12656002.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!