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

    class Solution {
    public:
        int threeSumClosest(vector<int> &num, int target) {
            int len = num.size();
            if (len < 3) {
                return 0;
            }
            sort(num.begin(), num.end());
            
            int sum = num[0] + num[1] + num[2];
            for (int i=0; i<len-2; i++) {
                int p = i + 1;
                int q = len - 1;
                while (p < q) {
                    int csum = num[i] + num[p] + num[q];
                    if (abs(target - csum) < abs(target - sum)) {
                        sum = csum;
                    }
                    if (csum > target) {
                        q--;
                    } else if (csum < target) {
                        p++;
                    } else {
                        return csum;
                    }
                }
            }
            return sum;
        }
    };

    n方时间复杂度

    第二轮:

    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).
    class Solution {
    public:
        int threeSumClosest(vector<int> &num, int target) {
            sort(num.begin(), num.end());
            int len = num.size();
            if (len < 3) {
                return 0;
            }
            int min_diff = INT_MAX;
            int closest = 0;
            for (int i=0; i<len; i++) {
                int rest = target - num[i];
                int p = i + 1;
                int q = len - 1;
                while (p < q) {
                    int t = num[p] + num[q];
                    int tdiff = abs(t - rest);
                    if (tdiff < min_diff) {
                        closest = t + num[i];
                        min_diff = tdiff;
                    }
                    if (t > rest) {
                        q--;
                    } else if (t < rest) {
                        p++;
                    } else {
                        break;
                    }
                }
            }
            return closest;
        }
        
    };
  • 相关阅读:
    nrm安装与配置
    vue-cli2升级到webpack4
    npm和yarn的区别
    Vite和Vue CLI的优劣
    基于vue+element+select实现的自定义控件selectTree
    Extjs 隐藏tabpanel的header / title
    await/async 总结
    泛型
    jpg图片打包生成pdf文件的几种方式
    varchar(100)和varchar(10)的区别
  • 原文地址:https://www.cnblogs.com/lailailai/p/3805618.html
Copyright © 2011-2022 走看看