当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode 面试题 16.14. 最佳直线

来自网友在路上 174874提问 提问时间:2023-11-03 16:53:57阅读次数: 74

最佳答案 问答题库748位专家为你答疑解惑

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  给定一个二维平面及平面上的 N 个点列表 Points,其中第 i 个点的坐标为 Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。

  设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为 S,你仅需返回 [S[0],S[1]] 作为答案,若有多条直线穿过了相同数量的点,则选择 S[0] 值较小的直线返回,S[0] 相同则选择 S[1] 值较小的直线返回。

示例:

输入: [[0,0],[1,1],[1,0],[2,0]]
输出: [0,2]
解释: 所求直线穿过的3个点的编号为[0,2,3]

提示:

  • 2 <= len(Points) <= 300
  • len(Points[i]) = 2

  点击此处跳转题目。

二、C# 题解

  暴力枚举,效果反而是最好的hh。注意以下几点:

  • 使用 x1 * y2 == x2 * y1 判断斜率是否相同。
  • 少封装方法,以免传参影响计算效率。
public class Solution {public int[] BestLine(int[][] points) {int   max = 0;int[] ans = { 0, 1 };for (var i = 0; i < points.Length; i++) {for (var j = i + 1; j < points.Length; j++) {int tmp = 0;int x1  = points[i][0] - points[j][0], y1 = points[i][1] - points[j][1];for (int k = j + 1; k < points.Length; k++) {int x2 = points[k][0] - points[j][0], y2 = points[k][1] - points[j][1];if (x1 * y2 == x2 * y1) tmp++;}if (tmp <= max) continue;max = tmp;ans[0] = i;ans[1] = j;}}return ans;}
}
  • 时间:152 ms,击败 100.00% 使用 C# 的用户
  • 内存:41.23 MB,击败 100.00% 使用 C# 的用户
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode 面试题 16.14. 最佳直线":http://eshow365.cn/6-31228-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!