平面上N个点,每两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点

问题: 平面上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;
}

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值