• 16. 3Sum Closest


    Problem statement:

    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).

    Solution:

    It is a change for 15. 3Sum, but quite similar, this problem requires to return the sum of three numbers which is most close to the target.

    Just do the absolute value test when we update the index, left and right, keep the closest sum and return at the end or in the loop. 

    Time complexity, two level loops, O(n * n).

    class Solution {
    public:
        int threeSumClosest(vector<int>& nums, int target) {
            sort(nums.begin(), nums.end());
            int closest_sum = nums[0] + nums[1] + nums[2];
            int size = nums.size();
            for(int i = 0; i < size - 1; i++){
                int left = i + 1;
                int right = size - 1;
                while(left < right){
                    if(abs(nums[i] + nums[left] + nums[right] - target) < abs(closest_sum - target)){
                        closest_sum = nums[i] + nums[left] + nums[right];
                    }
                    if(nums[i] + nums[left] + nums[right] == target){
                        return target;
                    } else if (nums[i] + nums[left] + nums[right] > target){
                        right--;
                    } else {
                        left++;
                    }
                }
            }
            return closest_sum;
        }
    };
  • 相关阅读:
    红黑树数据结构剖析
    miniui表单验证守则总结
    常用的JS页面跳转代码调用大全
    Jsp页面跳转和js控制页面跳转的几种方法
    处理和引发事件
    HeaderHandler 委托
    序列化SoapFormatter
    Debug.Assert
    C#的Thread类
    再次学习线程概念
  • 原文地址:https://www.cnblogs.com/wdw828/p/6883080.html
Copyright © 2020-2023  润新知