当前位置: 首页 > news >正文

LeetCode 面试题 16.14. 最佳直线

文章目录

  • 一、题目
  • 二、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# 的用户
http://www.lryc.cn/news/219066.html

相关文章:

  • Spring Boot创建多模块项目
  • Node.js、Chrome V8 引擎、非阻塞式I/O介绍
  • 企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?
  • NLP之LSTM原理剖析
  • ESP32网络开发实例-Web方式配置WiFi连接
  • ElasticSearch 批量插入漏数据
  • C++——类和对象之运算符重载
  • 第二阶段第一章——面向对象
  • Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用
  • 解决Visual Studio 2010 运行时屏幕一闪而过,无结果显示的问题
  • C++(20):为[[nodiscard]]提供提示信息
  • hi3518ev200 从sd卡启动rootfs
  • [BUUCTF NewStar 2023] week5 Crypto/pwn
  • 使用seldom编写http接口用例
  • Redis中Hash类型的命令
  • Java 函数式编程
  • 类的成员函数总结
  • java高级之单元测试、反射
  • MSQL系列(十三) Mysql实战-left/right/inner join 使用详解及索引优化
  • 前端面试题之HTML篇
  • Django ORM:数据库操作的Python化艺术
  • react受控组件与非受控组件
  • 小米产品面试题:淘宝为何需要确认收货?京东为何不需要?
  • (1)上位机底部栏 UI如何设置
  • 中国多主数据库:压强投入,期待破茧
  • JavaScript在ES6及后续新增的常用新特性
  • 试试流量回放,不用人工写自动化测试case了
  • 密钥管理系统功能及作用简介 安当加密
  • vue中watch属性的用法
  • Redis-使用java代码操作Redis