zoukankan      html  css  js  c++  java
  • 两个坐标点之间的距离小于或大于10(最优算法)

    朋友跟我分享的某大厂面试题:

    两个坐标点之间的距离小于或大于某个值。最简单的算法,勾股定理,distance = (x1-x2)的平方 + (y1-y2)的平方,最后开根号。还有没有效率更高的算法啊?百度没找到答案,我写下自己的,如果大家有好的想法,记得给我留言啊啊啊~~

    我的算法思想是:先求出弧度,再用cos把10映射到x轴的长度,最后再比较。

    执行1千万次的结果是方法2效率高。

    直接上代码吧。

    #include <iostream>
    #include <time.h>
    #include <math.h> 
    //坐标点1
    double nX1 = -3;double nY1 = -3;
    //坐标点2
    double nX2 = 3;double nY2 = 3;
    //方法1勾股定理
    bool CheckNear1(int nTarLen)
    {
    	int nLen = sqrt((pow((nX1-nX2), 2) + pow((nY1-nY2), 2)));
    	return nTarLen > nLen;
    }
    //方法2利用弧度算出给定值对应的直角边长度
    bool CheckNear2(int nTarLen)
    {
    	int nSubX = abs(nX1-nX2);
    	int nLen = nTarLen*cos(atan(nSubX/(nY1-nY2)));
    	return nLen > nSubX;
    }
    int main()
    {
    	clock_t start,finish;
    	start=clock();
    	for (int i = 0;i<10000000;++i)
    	{
    		CheckNear1(10);
    	}
    	finish=clock();
    	cout<<"
    方法1的运行时间为"<<(double)(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;
    
    	start=clock();
    	for (int i = 0;i<10000000;++i)
    	{
    		CheckNear2(10);
    	}
    	finish=clock();
    	cout<<"
    方法2的运行时间为"<<(double)(finish-start)/CLOCKS_PER_SEC<<"秒!"<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    SGU 499 Greatest Greatest Common Divisor
    pku 3468 A Simple Problem with Integers
    pku2226 Muddy Fields
    pku3041 Asteroids
    java基础string操作
    PowerDesigner(7)转载
    java基础2
    PowerDesigner(6)转载
    java基础3
    java基础(1)
  • 原文地址:https://www.cnblogs.com/workharder/p/11818019.html
Copyright © 2011-2022 走看看