加载中...

错题本 | LeetCode1232. 缀点成线

题目链接:https://leetcode-cn.com/problems/check-if-it-is-a-straight-line/

题目

在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。

请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false

分析

这种题目居然WA了一次。。。

依题意,判断给出的所有点是否都在同一直线上,我们只需要按照前两点的坐标计算斜率和截距,得到由前两点确定的直线方程,将后面的坐标套入此方程即可。

这题的特殊情况有两种:

  • 一共只给出两个点。两点确定一条直线,直接返回true。
  • 所有点垂直于x轴。这样的直线没有斜率,需要单独拎出来讨论(第一次提交就挂在这里了)。

直接放代码了。

class Solution {
public:
    bool checkStraightLine(vector<vector<int>>& coordinates) {
        // ax1 + b = y1; ax2 + b = y2
        // a(x1 - x2) = y1 - y2
        // a = (y1 - y2) / (x1 - x2)
        // b = y1 - ax1
        if (coordinates.size() == 2)
            return true;
        bool vertical = false;  // 垂直,无斜率
        float a = 0, b = 0;

        if (coordinates[0][0] == coordinates[1][0])
            vertical = true;
        else
        {
            a = (float)(coordinates[0][1] - coordinates[1][1]) / 
                (coordinates[0][0] - coordinates[1][0]);
            b = coordinates[0][1] - a * coordinates[0][0];
        }
        
        if (vertical)
        {
            for (int i = 2; i < coordinates.size(); ++i)
                if (coordinates[i][0] != coordinates[0][0])
                    return false;
        }
        else
        {
            for (int i = 2; i < coordinates.size(); ++i)
            {
                if (a * coordinates[i][0] + b != coordinates[i][1])
                    return false;
            }
        }
        
        return true;
    }
};
10 comments
Anonymous
Markdown is supported
@mpv945
mpv945commentedover 2 years ago

添加图片,如果使用外部图床的http链接 。图片无法点击放大,你那边怎么解决的?

@SGS4ever
SGS4evercommentedover 2 years ago

@mpv945
添加图片,如果使用外部图床的http链接 。图片无法点击放大,你那边怎么解决的?

我的博客没有使用图床,所以没办法帮到你~

@Celetherin
Celetherincommentedover 2 years ago

您好,我也是使用的stack主题,我在照着您的方法添加返回顶部按钮时,遇到了按钮虽然出现、也能够点击,但无法实现实际上的返回顶部功能的问题,我没有任何的代码知识,不知道您有没有解决方法?
另外,也是想提醒一下其他需要这篇教程的朋友,最新版的stack主题,添加返回按钮的组件应该在layouts/partials/sidebar/right.html, 在layouts/_default/single.html中添加代码会导致出现两个右边栏。

@jsjcjsjc
jsjcjsjccommentedover 2 years ago

请教一下博主,如何优雅的给stack主题添加广告哈?
我只想在左或者右侧边栏底部,或者每篇文章底部添加一个小小的广告,但是默认似乎的满屏广告哈~~
感谢

@SGS4ever
SGS4evercommentedover 2 years ago
@ClimbingMouse
ClimbingMousecommentedalmost 2 years ago

你好,按照你的方法设置页面载入动画,这个动画不会停止咋办啊

@46fafa
46fafacommentedalmost 2 years ago

博主你好,请问一下主页布局修改哪里的代码如何作用于整个网页,我发现修改后的布局只存在主页和前两篇文章,其他部分还是没修改的样子

@4kohakunushi
4kohakunushicommentedover 1 year ago

你好,关于左侧栏图标高亮我这里存在一些问题想请教你。我取消了原本主页直接抓取post的内容在中间显示的版块,这个部分改成了其他东西,与此同时新增了一个抓取post信息的与links、search等目录并列的一个目录,现在的问题是这些部分虽然都能正常显示,但是对应的抓取post的那个目录无法选中以后高亮,应该修改增加什么才能让它也可以选中后高亮呢?

@SGS4ever
SGS4evercommentedover 1 year ago

首先我只能基于本文使用的Stack版本来尝试解答,因为没看过当前的Stack主题的代码~
我重新翻了下此前写的关于高亮的内容,理论上只要你的post页面的标题在menu配置中即可高亮。如果post页面是你站点的根路径,那应该可以参考我的文章里写的方法,修改下active的触发逻辑~

@4kohakunushi
你好,关于左侧栏图标高亮我这里存在一些问题想请教你。我取消了原本主页直接抓取post的内容在中间显示的版块,这个部分改成了其他东西,与此同时新增了一个抓取post信息的与links、search等目录并列的一个目录,现在的问题是这些部分虽然都能正常显示,但是对应的抓取post的那个目录无法选中以后高亮,应该修改增加什么才能让它也可以选中后高亮呢?

@sansan-cc
sansan-cccommentedabout 1 month ago

感谢博主的建站帖子,有很大的帮助。

有朋自远方来,不亦说乎?