• 20210117 缀点成线


    在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
    
    请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。
    
     
    
    示例 1:
    
    
    
    输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
    输出:true
    示例 2:
    
    
    
    输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
    输出:false
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/check-if-it-is-a-straight-line
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    
    public boolean checkStraightLine(int[][] coordinates) {
    
        }

    思路:1. 坐标在同一条线上 其隔壁点的x y轴的差值必定相同(需要先对数组排序)

      2.斜率公式:k=(y1-y2)/(x1-x2) 

      用斜率公式时 斜率这样写k=(yi-y(i-1))/(xi-x(i-1)) 

    for (int i=2;i<len;i++){
                if(k!=(coordinates[i][1]-coordinates[i-1][1])/(coordinates[i][0]-coordinates[i-1][0])){
                    return false;
                }

    这样不合理  而且每次都对比计算隔壁2个数组没必要的 可以把其中一个点固定计算斜率 如下就合理 即k=(yi-y0)/(xi-x0) 

    for (int i=2;i<len;i++){
                if(k!=(coordinates[i][1]-coordinates[0][1])/(coordinates[i][0]-coordinates[0][0])){
                    return false;
                }

    因为xi-x(i-1)可能为0 还得考虑到被除数不为0 

    由k=(yi-y0)/(xi-x0)  k=(y1-y0)/(x1-x0) 

    得到(y1-y0)*(xi-x0)==(x1-x0)*(yi-y0)

     for (int i=2;i<len;i++){
                if((coordinates[1][1]-coordinates[0][1])*(coordinates[i][0]-coordinates[0][0])!=(coordinates[1][0]-coordinates[0][0])*(coordinates[i][1]-coordinates[0][1])){
                    return false;
                }
            }

    完整代码

     public static boolean checkStraightLine(int[][] coordinates) {
            int len =coordinates.length;
            for (int i=2;i<len;i++){
                if((coordinates[1][1]-coordinates[0][1])*(coordinates[i][0]-coordinates[0][0])!=(coordinates[1][0]-coordinates[0][0])*(coordinates[i][1]-coordinates[0][1])){
                    return false;
                }
            }
            return true;
        }
  • 相关阅读:
    多线程:C#.NET中使用BackgroundWorker在模态对话框中显示进度条
    通过外接程序将Outlook邮件导出成Word文档
    [轉]FusionChartsFree参数说明
    MSIL学习资源
    FastCGI Error 2147467259 (0x80004005)
    编程实现双击某个文件用指定程序打开
    Excel api Enumerations 常量
    [轉]全面认识页面设置之PageSetup 对象
    AjaxFileUploaderV2.1增加可上传多个文件
    [轉]VB.NET and C# Comparison
  • 原文地址:https://www.cnblogs.com/hbhb/p/14291777.html
Copyright © 2020-2023  润新知