问题: 平面上N个点,每两个点之间可以确定一条直线,求出最大斜率。时间效率越高越好。
方法:
1. 先把N个点按x排序。
2. 斜率k最大值为max(斜率(point[i],point[i+1])) 0 <=i <n-2。
3. 复杂度Nlog(N)
#include<iostream>
#include<algorithm>
using namespace std;
void swap(int &a,int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void ssort(int x[],int y[],int len)
{
for( int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(x[j]>x[j+1])
{
swap(x[j],x[j+1]);
swap(y[j],y[j+1]);
}
}
}
}
int main()
{
int x[]={1,6,4,2,3};
int y[]={2,4,6,11,9};
ssort(x,y,5);
double max=(y[1]-y[0])/(x[1]-x[0]);
for(int i=2;i<5;i++)
{
double n = (y[i]-y[i-1])/(x[i]-x[i-1]);
max = max>n?max:n;
}
cout<<"max = "<<max<<endl;
getchar();
return 0;
}