首页 > 其他 > 详细

3Sum

时间:2016-01-03 23:59:04      阅读:430      评论:0      收藏:0      [点我收藏+]

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • The solution set must not contain duplicate triplets.

 

    For example, given array S = {-1 0 1 2 -1 -4},

    A solution set is:
    (-1, 0, 1)
    (-1, -1, 2)
class Solution {
public:
    int b_search(vector<int> &n, int b, int e, int x) {
        int l = b;
        int r = e;
        while (l <= r) {
            int mid = l + ((r - l ) >> 2);
            if (n[mid] == x) {
                return mid;
            } else if (n[mid] > x) {
                r = mid - 1;
            } else {
                l = mid + 1;
            }
        }
        return -1;
    }
    /*
     *固定其中2点,找第3点,如果找到就添加到结果中
     * 每次固定左边的点,从右想走遍历右边的点,查找两个点的之间是否有满足的点
     * 注意左边的点要去掉重复的
     */
    vector<vector<int>> threeSum(vector<int>& nums) {
        int i,j,k;
        int size = nums.size();
        vector<vector<int>> res;
        sort(nums.begin(), nums.end());
        for (i=0; i<size-2; i++) {
            //过滤掉相同的左边点,防止出现重复的结果
            if (i > 0 && nums[i] == nums[i-1]) {
                continue;
            }
            for (j=size-1; j>i+1; j--) {
                if (j < size-1 && nums[j] == nums[j+1]) {
                    continue;
                }
                int s = b_search(nums, i+1, j-1, 0 - nums[i] - nums[j]);
                if (s != -1) {
                    vector<int> tmp;
                    tmp.push_back(nums[i]);
                    tmp.push_back(nums[s]);
                    tmp.push_back(nums[j]);
                    res.push_back(tmp);
                }
            }
        }
        return res;
    }
};

 

3Sum

原文:http://www.cnblogs.com/SpeakSoftlyLove/p/5097467.html

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