Bootstrap

【CSP CCF记录】201712-1第12次认证 最小差值

题目

样例输入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循环,时间复杂度为n^{2}

#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的运行效率只得到微弱的提高,不过这给我们提供了一种减小运行时间的思路。

;