zoukankan      html  css  js  c++  java
  • 16 3sum closest

    16 3sum closest

    Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

        For example, given array S = {-1 2 1 -4}, and target = 1.

        The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

    想法1:

        和3sum的想法类似,先对数组进行排序,然后给closestNum赋初值等于nums[0]+nums[1]+nums[2]。head,tail分别指向数组的头和尾,如果sum>target,则tail--;否则,head++;如果(sum-target)的绝对值小于(closestNum-target)的绝对值,那么更新closestNum=sum。

    class Solution {
    public:
        int threeSumClosest(vector<int>& nums, int target) {
            sort(nums.begin(), nums.end());
            int head, tail, closestNum = nums[0] + nums[1] + nums[2];
            for (int i = 0; i < nums.size(); i++){
                head = i + 1;
                tail = nums.size() - 1;
                int sum;
                bool isCalculate = false;
                while (head < tail){
                    sum = nums[head] + nums[tail] + nums[i];
                    if (sum<target){
                        if (abs(target - sum)<abs(target - closestNum))
                            closestNum = sum;
                        head++;
                    }
                    else if (nums[head] + nums[tail] + nums[i]>target){
                        if (abs(target - sum) < abs(target - closestNum))
                            closestNum = sum;
                        tail--;
                    }
                    else {
                        return target;
                    }
                }
            }
            return closestNum;
        }
    };
  • 相关阅读:
    console.time测试代码块执行时间
    label表单的关联性
    attr返回被选元素的属性值
    2018 885程序设计编程题
    输出斐波拉数列的前n个数(n>=2)
    简单的光照贴图
    复杂纹理复制及纹理叠加效果
    简单纹理复制
    UV旋转shader
    shader实现积雪效果
  • 原文地址:https://www.cnblogs.com/Lxiaoyouling/p/8098208.html
Copyright © 2011-2022 走看看