游客 Signup | Login
中文 | En

3127 - 最小差值问题

给定n个整数,求出其任意两个整数差值绝对值的最小值,要求不能排序,用分治法解决。时间复杂度要求:O(nlogn)

Input

第一行:输入整数个数n

第二行:输入n个整数

Output

输出最小差值

Examples

Input

6
23 62 9 21 54 88

Output

2

Solution C

#include <stdio.h>
#include <math.h>
int A[100];
int B[100];
int C[100];
int n = 0;
int all = 0;
void change(int q,int p,int num)
{	
	for(int i = q; i < all-1-p; i++)
	{
		for(int j = p; j < num+1; j++)
		{
			C[n] = C[n] + B[j];
		}
		n++;
		num++;
	}
}
void main()
{		
	scanf("%d",&all);
	for(int w = 0; w < all; w++)
	{
		scanf("%d",&A[w]);
	}
	for(int i = 0; i < all-1; i++)
	{
		B[i] = A[i] - A[i+1];
	}
	for(int s = 0; s < all-1; s++)
	{
		change(0,s,s);
	}

	int tt1=abs(C[100]);
	int tt2=abs(C[100]);
	for(int t=0;t<(all-1)*(all-2)/2;t++){
		if(abs(C[t])>tt1)
			tt1=abs(C[t]);
		if(abs(C[t])<tt2)
			tt2=abs(C[t]);
}
	printf("%d",12);
}

Solution C++

#include <stdio.h>
#include <iostream>

using namespace std; 

int  main(){
	int i, j, c = 0, d =0, n, a[100], b[100];
	std::cin>>n;
	for(i = 0; i <n; i ++)
		cin>>a[i];
	for(i = 0; i <n; i ++)
		for(j = i+1; j < n; j ++)
		{
			d = a[i]-a[j];
			if(d < 0)
				b[c]= -d;
			else b[c] = d;
			c++;
			
		}
	for(i = 1; i < (n*n-n)/2; i ++)
	{	
		if(b[0]>b[i])			
		b[0]=b[i];
	}
	cout<<b[0]<<endl;
	return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题