试题编号: | 201712-1 |
试题名称: | 最小差值 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。 输入格式 输入第一行包含一个整数n。 输出格式 输出一个整数,表示答案。 样例输入 5 样例输出 1 样例说明 相差最小的两个数是5和4,它们之间的差值是1。 样例输入 5 样例输出 0 样例说明 有两个相同的数3,它们之间的差值是0. 数据规模和约定 对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。 |
题目分析:
这道题说白了就是求整个数组中两个元素绝对值相差最小的值
先排序,这时候只需要进行n-1次运算,时间复杂度为O(n)
关于排序
STL中就自带了排序函数sortsort 对给定区间所有元素进行排序 要使用此函数只需用#include <algorithm> sort即可使用,语法描述为:
|
输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).
1)自己编写compare函数:
|
转自:https://www.cnblogs.com/hfultrastrong/p/6428109.html
若不排序,直接做运算,需用双重循环做差值,时间复杂度为O(n*n)
# include<cstdio>
# include<cstdlib>
# include<algorithm>
using namespace std;
int a[1010];
int main()
{
int n,dif,min = 9999;
scanf("%d",&n);
for(int i = 0;i < n;++i)
scanf("%d",&a[i]);
sort(a,a+n);
for(int i = 1;i < n;++i)
{
dif = abs(a[i] - a[i-1]);
if(min > dif)
min = dif;
}
printf("%d\n",min);
return 0;
}