绝对值最小
来源:互联网 发布:淘宝手机端店铺装修 编辑:程序博客网 时间:2024/06/14 17:55
【Description】
给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n)。例如:A={1, 4, -3},则:|A[0] + A[0]| = |1 + 1| = 2
|A[0] + A[1]| = |1 + 4| = 5
|A[0] + A[2]| = |1 + (-3)| = 2
|A[1] + A[1]| = |4 + 4| = 8
|A[1] + A[2]| = |4 + (-3)| = 1
|A[2] + A[2]| = |(-3) + (-3)| = 6
所以ans=1。
【Input】
有多组测数数据,每组数据有两行,第一行包含一个正整数n(0<n<=100000),第二行包含n个整数,分别表示A[0], A[1], A[2], .... , A[n-1] (|A[i]|<2^30)。 输入以文件结束。【Output】
对于每组数据,输出相应的答案。【Sample Input】
31 4 -3
1
2
3
-1 -2 -5
3
1 2 3
2
0 5
【Sample Output】
14
2
2
0
【分析】和的绝对值最小有2种情况:元素全负或全非负,为绝对值最小元素的2倍;元素有正有负,为一正数和一负数之和。若是第一种情况,边输入边判断;否则,先对数组排序,从两头向中间比较,定义两个分别指向首尾的指针,当两数之和为正时说明正数较大,尾指针前移;当两数之和为负时,负数较大,首指针后移;两数之和为0,最小绝对值为0,无需再计算。
#include <iostream>#include <cmath>#include <vector>#include <algorithm>using namespace std;const int INF = 1000000000;vector<int> A;int main() {int n;while (cin >> n) {int minDist = INF, ai;for (int i = 0; i < n; i++) {cin >> ai;A.push_back(ai);if (fabs(2 * ai) < minDist) minDist = fabs(2 * ai);}stable_sort(A.begin(), A.end());int first = 0, last = n - 1, tmp;while (first != last) {tmp = A[last] + A[first];if (fabs(tmp) < minDist) minDist = fabs(tmp);if (tmp > 0) last--;else if (tmp < 0) first++;else {minDist = 0;break;}}cout << minDist << endl;A.clear();}return 0;}
0 0
- 绝对值最小
- 绝对值最小
- 绝对值最小
- 绝对值最小
- 有序数组最小绝对值。
- CSDN挑战绝对值最小
- 计算最小绝对值---c实现
- 求绝对值最小的数
- 求绝对值最小的数
- 求绝对值最小的数
- 求绝对值最小的数
- 连续子段绝对值最小问题
- 面试题31:数组中的最小绝对值
- CSDN编程挑战:绝对值最小--Java实现
- A题之绝对值最小问题
- CSDN挑战编程——《绝对值最小》
- CSDN挑战编程——《绝对值最小》
- hdu 4431 绝对值之和最小公式
- UVA 111 History Grading
- 【读书】《Node.js Design Patterns》1.1——Node.js哲学
- Windows的Which命令
- Common Lisp 学习笔记
- Hibernate初步理解
- 绝对值最小
- 关于Activity的启动模式(一)
- 2014年河南工程技术学校招聘专业技术人员拟聘用人员公示
- Ng在coursera上的机器学习公开课——zai总结(3)_Logistic Regression
- poj 2251
- C# const 与 readonly 区别
- WEB开发中最致命的8个小错误
- 【wxlua教程一】搭建环境
- pat 1071