返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何实现最近三数之和
  • 258
分享到

C++如何实现最近三数之和

2023-06-19 13:06:59 258人浏览 安东尼
摘要

本文小编为大家详细介绍“c++如何实现最近三数之和”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现最近三数之和”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。3Sum Closest 最近三数之和Gi

本文小编为大家详细介绍“c++如何实现最近三数之和”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现最近三数之和”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

3Sum Closest 最近三数之和

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

这道题让我们求最接近给定值的三数之和,是在之前那道 3Sum 的基础上又增加了些许难度,那么这道题让返回这个最接近于给定值的值,即要保证当前三数和跟给定值之间的差的绝对值最小,所以需要定义一个变量 diff 用来记录差的绝对值,然后还是要先将数组排个序,然后开始遍历数组,思路跟那道三数之和很相似,都是先确定一个数,然后用两个指针 left 和 right 来滑动寻找另外两个数,每确定两个数,求出此三数之和,然后算和给定值的差的绝对值存在 newDiff 中,然后和 diff 比较并更新 diff 和结果 closest 即可,代码如下:

解法一:

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

我们还可以稍稍进行一下优化,每次判断一下,当 nums[i]*3 > target 的时候,就可以直接比较 closest 和 nums[i] + nums[i+1] + nums[i+2] 的值,返回较小的那个,因为数组已经排过序了,后面的数字只会越来越大,就不必再往后比较了,参见代码如下:

解法二:

class Solution {public:    int threeSumClosest(vector<int>& nums, int target) {        int closest = nums[0] + nums[1] + nums[2];        int diff = abs(closest - target);        sort(nums.begin(), nums.end());        for (int i = 0; i < nums.size() - 2; ++i) {            if (nums[i] * 3 > target) return min(closest, nums[i] + nums[i + 1] + nums[i + 2]);            int left = i + 1, right = nums.size() - 1;            while (left < right) {                int sum = nums[i] + nums[left] + nums[right];                int newDiff = abs(sum - target);                if (diff > newDiff) {                    diff = newDiff;                    closest = sum;                }                if (sum < target) ++left;                else --right;            }        }        return closest;    }};

读到这里,这篇“C++如何实现最近三数之和”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++如何实现最近三数之和

本文链接: https://lsjlt.com/news/296211.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++如何实现最近三数之和
    本文小编为大家详细介绍“C++如何实现最近三数之和”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现最近三数之和”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。3Sum Closest 最近三数之和Gi...
    99+
    2023-06-19
  • C++实现LeetCode(16.最近三数之和)
    [LeetCode] 16. 3Sum Closest 最近三数之和 Given an array nums of n integers an...
    99+
    2024-04-02
  • C++实现LeetCode(15.三数之和)
    [LeetCode] 15. 3Sum 三数之和 Given an array S of n integers, are there elem...
    99+
    2024-04-02
  • C++实现LeetCode(209.最短子数组之和)
    [LeetCode] 209. Minimum Size Subarray Sum 最短子数组之和 Given an array of n positive in...
    99+
    2024-04-02
  • C++实现LeetCode(170.两数之和之三 - 数据结构设计)
    [LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计 Design and implement a ...
    99+
    2024-04-02
  • C#算法如何实现两数之和
    小编给大家分享一下C#算法如何实现两数之和,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目给定一个整数数组 nums和一个目标值 targe...
    99+
    2023-06-26
  • c语言如何实现两数之和
    目录c语言实现两数之和c语言中比较两数大小题目要求分析一下c语言实现两数之和 int *twoSum(int *nums , int numsSize , int target , ...
    99+
    2024-04-02
  • 如何用Java代码实现最近最少使用缓存
    这期内容当中小编将会给大家带来有关如何用Java代码实现最近最少使用缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。怎么实现一个最近最少使用(LRU)的缓存。缓存可以通过哈希表来实现,然而为这个缓存增加...
    99+
    2023-06-17
  • QT实战之打开最近图片功能的实现
    目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件五、效果演示一、项目介绍 本文介绍利用Q...
    99+
    2024-04-02
  • QT实战之打开最近文档功能的实现
    目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件4.3 main.cpp五、效果演示一、...
    99+
    2024-04-02
  • C++实现LeetCode(123.买股票的最佳时间之三)
    [LeetCode] 123.Best Time to Buy and Sell Stock III 买股票的最佳时间之三 Say you have an array for whi...
    99+
    2024-04-02
  • Python三数之和的实现方式
    目录三数之和题目描述思路Python3代码三数之和题目描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c , 使得 a + b + c =...
    99+
    2024-04-02
  • php如何查询最接近一个数
    本文小编为大家详细介绍“php如何查询最接近一个数”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何查询最接近一个数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php查询最接近一个数的方法:1、创建一个...
    99+
    2023-07-04
  • c语言之如何求e的近似值
    目录如何求e的近似值我的答案求e的近似值(巧用保留位数,拒绝最大值溢出)总结如何求e的近似值 自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求...
    99+
    2022-12-08
    c语言近似值 求e的近似值 c语言求e的近似值
  • LeetCode如何实现两数之和
    小编给大家分享一下LeetCode如何实现两数之和,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目:给定一个整数数组 nums 和一个目标值 target,请你...
    99+
    2023-06-04
  • C++实现LeetCode(18.四数之和)
    [LeetCode] 18. 4Sum 四数之和 Given an array S of n integers, are there elements a, b, c, and d ...
    99+
    2024-04-02
  • 如何用C语言数组实现三子棋
    本文小编为大家详细介绍“如何用C语言数组实现三子棋”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何用C语言数组实现三子棋”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。三子棋:(拆分部分如下)test.c 测试...
    99+
    2023-06-26
  • C++实现LeetCode之最短子数组求和的示例分析
    这篇文章主要介绍C++实现LeetCode之最短子数组求和的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完![LeetCode] 209. Minimum Size Subarray Sum 最短子数组之和Gi...
    99+
    2023-06-20
  • javascript如何实现数组最大值和最小值
    小编给大家分享一下javascript如何实现数组最大值和最小值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!给定一个数组[1,8,5,4,3,9,2],编写一个...
    99+
    2023-06-15
  • C语言如何实现三子棋
    目录三子棋测试逻辑游戏逻辑初始化棋盘下棋判断胜利总结相信在座的各位都玩过三子棋和扫雷,但是有哪一位想过自己能够在电脑上实现三子棋呢?今天我们就一起来实现一下吧。三子棋首先我们看三子棋...
    99+
    2022-12-27
    C语言实现三子棋 C语言三子棋 C三子棋
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作