• lintcode-59-最接近的三数之和


    59-最接近的三数之和

    给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。

    注意事项

    只需要返回三元组之和,无需返回三元组本身

    样例

    例如 S = [-1, 2, 1, -4] and target = 1. 和最接近 1 的三元组是 -1 + 2 + 1 = 2.

    挑战

    O(n^2) 时间, O(1) 额外空间。

    标签

    排序 数组 两根指针

    思路

    延续三数之和的思路,实时更新最接近的三数和

    code

    class Solution {
    public:    
        /**
         * @param numbers: Give an array numbers of n integer
         * @param target: An integer
         * @return: return the sum of the three integers, the sum closest target.
         */
        int threeSumClosest(vector<int> nums, int target) {
            // write your code here
            int size = nums.size();
            if(size < 3) {
                return 0;
            }
    
            sort(nums.begin(),nums.end());
            int ans = 0x7FFFFFFF, i = 0, j = 0, k = 0;
    
            for(i=0; i<size; i++) {
                for(j=i+1, k=size-1; j<k;){
                    int sum = nums[i] + nums[j] + nums[k];
    
                    ans = abs(target-sum) < abs(target-ans) ? sum : ans;
    
                    if(sum > target) {
                        k--;
                    }
                    else if(sum < target) {
                        ++j;
                    }
                    else {
                        return sum;
                    }
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    SDN第二次作业
    SDN第一次上机作业
    SDN第一次作业
    alpha冲刺第四天
    alpha冲刺第二天
    alpha冲刺第一天
    项目需求分析
    结对第二次作业
    团队选题报告(i know)
    结对作业——原型设计
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7190640.html
Copyright © 2020-2023  润新知