zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 16. 16. 最接近的三数之和

    题目描述

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

    示例:

    输入:nums = [-1,2,1,-4], target = 1
    输出:2
    解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 
    

    提示:

    [3 <= nums.length <= 10^3 \ -10^3 <= nums[i] <= 10^3 \ -10^4 <= target <= 10^4 \ ]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/3sum-closest
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    My Solution

    假定答案为 nums[a]+nums[b]+nums[c],当我们固定 nums[a] 时,显然 nums[b]nums[c] 可以使用双指针。
    复杂度 (O(n^2)) ,排序 (O(nlogn))

    #pragma G++ optimize("O2")
    
    class Solution {
     public:
      int threeSumClosest(vector<int>& nums, int target) {
        const int n = nums.size();
        sort(nums.begin(), nums.end());
        int ans = 1e5;
        for(int a = 0; a < n; a++) {
          for(int b = a + 1, c = n - 1, s; b < n; ++b) {
            s = nums[a] + nums[b] + nums[c];
            while(s > target && c > b) {
              if(abs(s - target) < abs(ans - target))
                ans = s;
              c--;
              s = nums[a] + nums[b] + nums[c];
            }
            if(c > b && abs(s - target) < abs(ans - target))
              ans = s;
          }
        }
        return ans;
      }
    };
    
  • 相关阅读:
    PAT:1002. 写出这个数 (20) AC
    PAT:1031. 查验身份证(15) AC
    PAT:1021. 个位数统计 (15) AC
    NSDate
    iOS程序的生命的周期
    Swift swith语句
    Swift 循环语句
    Swift 基本运算符
    Swift 解包
    Swift 可选类型(补充)
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/13185765.html
Copyright © 2011-2022 走看看