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;
        }
        
    };
  • 相关阅读:
    迭代器实现斐波那契数列
    type 创建类,赋予类静态方法等
    使用types库修改函数
    使用property取代getter和setter方法
    pdb 进行调试
    nonlocal 访问变量
    timeit_list操作测试
    metaclass 拦截类的创建,并返回
    isinstance方法判断可迭代和迭代器
    苹果cms10 官方QQ微信防红防封代码
  • 原文地址:https://www.cnblogs.com/lailailai/p/3805618.html
Copyright © 2011-2022 走看看