求无序数组中三个元素相加与目标数最接近的三元素之和
2017-05-26 22:58
253 查看
/************************************************************************************************ **description:给定一个无序数组和一个目标数,要求返回数组中三个元素相加与目标数最接近的三元素之和 ** 如:Input: a={-1 2 1 -4},target=1 Output: 2 (-1 + 2 + 1 = 2) *************************************************************************************************/ //先排序,然后对有序数组遍历,内层夹逼。 //时间复杂度O(n^2),空间复杂度O(1) #include<iostream> #include<vector> #include<algorithm> using namespace std; int threeSumClosest(vector<int> &arr, int target) { int result = 0; int minDiff = 100; if (arr.size() < 3) return result; sort(arr.begin(), arr.end()); for (int i = 0; i < arr.size() - 2; i++) { if (i > 0 && arr[i] == arr[i - 1]) continue; int m = i + 1; int n = arr.size() - 1; while (m < n) { int diff = abs(target - arr[i] - arr[m] - arr ); if (diff < minDiff) { result = arr[i] + arr[m] + arr ; minDiff = diff; } if (arr[i] + arr[m] + arr < target) m++; else n--; 4000 } } return result; }
相关文章推荐
- java 无序数组中两个元素相加等于指定的数 o(n)
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- 求无序数组中三元素相加等于特定值的所有情况
- 求无序数组中四元素相加等于特定值的所有情况
- 打印三个数相加和最接近目标整数的组合
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 无序数组O(n)时间找到排序后的两个相邻元素使得他们之间的差最大
- LeetCode:1_Two_Sum | 两个元素相加等于目标元素 | Medium
- LeetCode 1. Two Sum--数组中两元素相加为该数值,输出对应的两个索引
- 给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
- 输入一个无序的数组,按照一定的方式输出结果, 要求两个数的相加和为10
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 找出一个整形数组的所有元素除了一个、两个、三个元素外,其余全是成对出现的,找出这些元素
- javascript中快速求数组的全部元素的相加之和
- 有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。
- 34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值
- 阿里在线编程,去除三个元素,四等分数组问题!
- 求无序数组的第二小的元素
- leetcode-java.T016_threeSumClosest---给定包含n个整数数组S,找到S中的三个整数,从而使之和最接近给定的数,返回三个整数的总和.