Leetcode:3Sum Closest
来源:互联网 发布:琪琪影院软件下载 编辑:程序博客网 时间:2024/06/06 01:16
3Sum Closest:
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) { vector<int> v(num.begin(), num.end()); // I didn't wanted to disturb original array. int n = 0; int ans = 0; int sum; sort(v.begin(), v.end()); // If less then 3 elements then return their sum while (v.size() <= 3) { return accumulate(v.begin(), v.end(), 0); } n = v.size(); /* v[0] v[1] v[2] ... v[i] .... v[j] ... v[k] ... v[n-2] v[n-1] * v[i] <= v[j] <= v[k] always, because we sorted our array. * Now, for each number, v[i] : we look for pairs v[j] & v[k] such that * absolute value of (target - (v[i] + v[j] + v[k]) is minimised. * if the sum of the triplet is greater then the target it implies * we need to reduce our sum, so we do K = K - 1, that is we reduce * our sum by taking a smaller number. * Simillarly if sum of the triplet is less then the target then we * increase out sum by taking a larger number, i.e. J = J + 1. */ ans = v[0] + v[1] + v[2]; for (int i = 0; i < n-2; i++) { int j = i + 1; int k = n - 1; while (j < k) { sum = v[i] + v[j] + v[k]; if (abs(target - ans) > abs(target - sum)) { ans = sum; if (ans == target) return ans; } (sum > target) ? k-- : j++; } } return ans;}};
0 0
- LeetCode: 3 Sum Closest
- leetcode - 3 sum closest
- leetcode 3Sum Closest
- LeetCode: 3Sum Closest
- [Leetcode]3Sum Closest
- Leetcode: 3SUM Closest
- LeetCode 3Sum Closest
- [Leetcode] 3Sum Closest
- LeetCode : 3Sum Closest
- LeetCode 3Sum Closest
- [LeetCode] 3Sum Closest
- 【leetcode】3Sum Closest
- [LeetCode]3Sum Closest
- LeetCode-3Sum Closest
- LeetCode:3Sum Closest
- LeetCode | 3Sum Closest
- 【leetcode】3Sum Closest
- Leetcode: 3Sum Closest
- 关于QPluginLoader的加载和卸载
- 向量空间模型——计算文本(英文)相似度
- leetcode: Interleaving String
- iOS图像拉伸,stretchableImageWithLeftCapWidth:topCapHeight:
- [游戏]传染病CONTAGION
- Leetcode:3Sum Closest
- MyBatis3整合Spring3的Transaction事务处理
- poj3468 树状数组解法(树状数组维护区间更新)
- 【知乎】2014年放弃阿里巴巴 offer 的人为什么格外多?
- 循环赛日程表java写
- RootSudo
- 文档聚类概述
- 软件开发过程(CMMI/RUP/XP/MSF)是与非?
- Android NDK编程(一) Windows下环境配置