zoukankan      html  css  js  c++  java
  • LeetCode 16. 3Sum Closest

    问题链接

    LeetCode 16. 3Sum Closest

    题目解析

    给定n个元素的数组和目标值,取三个元素使三数之和最接近目标值,求最接近目标值的三数之和。

    解题思路

    本题与LeetCode 15. 3Sum,思路一模一样,难度相差不大。

    同样的,先将数组排序。固定最小数字,移动左右指针,利用变量 (diff) 记录最小的误差值,需要注意一点:与 (3Sum) 不同,本题只需输出最接近的和即可,一些限制条件可以去除,比如 (nums[k]>target) 这种情况,在 (3sum) 中直接跳出循环,但在本题中也是有可能是答案的。

    时间复杂度:(O(n^2))

    参考代码

    class Solution {
    public:
        int threeSumClosest(vector<int>& nums, int target) {
            int diff = INT_MAX, res;
            sort(nums.begin(), nums.end());
            for(int k = 0; k < nums.size(); k++) {
                int i = k+1, j = nums.size()-1;
                while(i < j) {
                    int sum = nums[k] + nums[i] + nums[j];
                    int newDiff = abs(sum - target);
                    if(diff > newDiff) {
                        res = sum;
                        diff = newDiff;
                    }
                    if(sum < target) ++i;
                    else if(sum > target) --j;
                    else return target;
                }
            }
            return res;
        }
    };
    

    相似题目

    LeetCode 1. Two Sum
    LeetCode 15. 3Sum
    LeetCode 18. 4Sum


    LeetCode All in One题解汇总(持续更新中...)

    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    四则运算测试脚本运行情况
    AAA
    (2015秋) 软工作业成绩公布(12月26号更新)
    判断闰年的Java算法
    B
    A
    Where Amazing Happens
    安利一发资料站
    C
    B
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8610711.html
Copyright © 2011-2022 走看看