题目
样例输入1
5
1 5 4 8 20
样例输出1
1
样例说明: 相差最小的两个数是5和4,它们之间的差值是1。
样例输入2
5
9 3 6 1 3
样例输出2
0
样例说明: 有两个相同的数3,它们之间的差值是0.
代码
题意简单易懂,主要是如何实现。
方案1
两个for循环,时间复杂度为
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[1010];
int diff=1e5;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
for(int j=0;j<i;j++)
{
int temp=abs(a[i]-a[j]);
if(temp<diff)
{
diff=temp;
}
}
}
cout<<diff;
return 0;
}
方案2
先用sort()函数对数组a进行排序,sort函数的排序方法类似于快排方法,时间复杂度为n*log2(n)。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[1010];
int diff=1e5;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int j=1;j<n;j++)
{
int temp=abs(a[j]-a[j-1]);
if(temp<diff)
{
diff=temp;
}
}
cout<<diff;
return 0;
}
运行
方案1
方案2
由于数据量较小,对比方案1,方案2的运行效率只得到微弱的提高,不过这给我们提供了一种减小运行时间的思路。