16.最相似的三数之和(javascript)16.3SumClosest
原创给你一个长度 n 整数数组 nums 和 A目标值 target。请你从 nums 选择三个整数,使其和 target 最接近。
返回这三个数字的总和。
假设每组输入只有一个解决方案。
Given an integer array nums of length n 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.
示例 1:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的总和是 2 (-1 + 2 + 1 = 2) 。
示例 2:
输入:nums = [0,0,0], target = 1
输出:0
本主题不需要特别处理重复值,因为三个数字的总和最接近目标值。
- 按升序排列获取的阵列
- 获取前三个数字的总和 nums[0] + nums[1] + nums[2]
- 遍历列表并将两个指针指向彼此。i+1和len-1,两个接近中间的指针
- 当遇到|sum - target|<|res - target|,将res值已更新
- l++ r-在什么情况下,
当三个数字之和<目标值,l指针指向右侧。l++
当三个数字之和>目标值,r指针指向右侧。r–
当三个数字之和==目标值,直接返回res。(主题中只有一个解决方案。) -
当循环结束时res的值返回
var threeSumClosest = function (nums, target) { nums.sort((a, b) => { return a - b }) let len = nums.length let res = nums[0] + nums[1] + nums[2] for (let i = 0; i < len; i++) { let l = i + 1 let r = len - 1 while (l < r) { let sum = nums[i] + nums[l] + nums[r] if (Math.abs(sum - target) < Math.abs(res - target)) { res = sum } if (sum < target) { l++ } else if (sum > target) { r-- } else { return res } } } return res };
leetcode: https://leetcode.cn/problems/3sum-closest/
可以参考解决问题的官方想法:
https://leetcode.cn/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除