平面上N个点,没两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。
先把N个点按x排序。
斜率k最大值为max(斜率(point[i],point[i+1])) 0 <=i <n-2。
复杂度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; }