问题描述
数轴上有n个数字,求最近的两个数,即min(abs(x-y))
输入格式
第一行包含一个整数n。
接下来一行,表示n整数。
输出格式
一个整数表示最小距离
样例输入
6
7 3 4 11 9 17
样例输出
1
样例说明
取3和4
数据规模和约定
n<=100000
所有整数<=10^7
思路:先排序,然后相邻的两个数相差取绝对值,找出最小的
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long i,n,a[100001],j,x,min=10000000;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //给数组排序
for(i=0;i<n-1;i++)
{
x=abs(a[i+1]-a[i]);
if(x<min)
min=x; //找最小
}
cout<<min<<endl;
return 0;
}
超时代码:
运用dfs把问题复杂化了
#include<bits/stdc++.h>
using namespace std;
#define N 100005
int n;
long long a[N];
long long ans=10000005;
void dfs(int t)
{
if(t>n) return;//超出数组边界
for(int i=t+1;i<n;i++){
ans=min(ans,abs(a[t]-a[i]));
}
dfs(t+1);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
dfs(0);
cout<<ans<<endl;
return 0;
}