当前位置:网站首页>LeetCode_ Hash table_ Difficulties_ 149. Maximum number of points on the line
LeetCode_ Hash table_ Difficulties_ 149. Maximum number of points on the line
2022-07-05 20:58:00 【Old street of small town】
1. subject
Give you an array points , among points[i] = [xi, yi] Express X-Y A point on the plane . Find out how many points are in the same line at most .
Example 1:
Input :points = [[1,1],[2,2],[3,3]]
Output :3
Example 2:
Input :points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
Output :4
Tips :
1 <= points.length <= 300
points[i].length == 2
-104 <= xi, yi <= 104
points All points in are different from each other
source : Power button (LeetCode)
link :https://leetcode.cn/problems/max-points-on-a-line
2. Ideas
(1) The law of violent exhaustion
Violent exhaustion is easier to think of , Because two different points in the plane can determine a straight line , So you can First enumerate the combination of two points ( That is to determine a straight line ), Then check whether the remaining points are on the straight line .
(2) Improvement of violent exhaustion _ Hashtable
Train of thought reference The user's question solution .
Because two points determine a straight line , So we can enumerate all the possible slope of the straight line ( That is, enumerate all point pairs ), Then use the hash table to count the number of points on the straight line corresponding to all slopes ( Instant key / value = Slope / The number of points ), Then the maximum of all values is the answer .
3. Code implementation (Java)
// Ideas 1———— The law of violent exhaustion
class Solution {
public int maxPoints(int[][] points) {
// At most cnt The points are on the same straight line , because 1 <= points.length <= 300, therefore cnt The initial value of 1
int cnt = 1;
int n = points.length;
for (int i = 0; i < n; i++) {
int[] p1 = points[i];
for (int j = i + 1; j < n; j++) {
int[] p2 = points[j];
//p1 And p2 It must be in a straight line , So at least 2 The points are on the same straight line
int tmpCnt = 2;
for (int k = j + 1; k < n; k++) {
int[] p3 = points[k];
/* (1) If (p1[1] - p2[1])/(p1[0] - p2[0]) == (p2[1] - p3[1])/(p2[0] - p3[0]) that p1、p2、p3 this 3 The points are on the same straight line (2) In order to prevent the loss of accuracy when dividing integers , So change the above equation to : (p1[0] - p2[0]) * (p2[1] - p3[1]) = (p1[1] - p2[1]) * (p2[0] - p3[0]) */
if ((p1[0] - p2[0]) * (p2[1] - p3[1]) == (p1[1] - p2[1]) * (p2[0] - p3[0])) {
tmpCnt++;
}
}
cnt = Math.max(tmpCnt, cnt);
}
}
return cnt;
}
}
// Ideas 2———— Improvement of violent exhaustion _ Hashtable
class Solution {
public int maxPoints(int[][] ps) {
int n = ps.length;
int cnt = 1;
for (int i = 0; i < n; i++) {
Map<String, Integer> hashMap = new HashMap<>();
// From the current point i The maximum number of points passed by the emitted straight line
int max = 0;
for (int j = i + 1; j < n; j++) {
int x1 = ps[i][0], y1 = ps[i][1], x2 = ps[j][0], y2 = ps[j][1];
int a = x1 - x2, b = y1 - y2;
int k = gcd(a, b);
String key = (a / k) + "_" + (b / k);
hashMap.put(key, hashMap.getOrDefault(key, 0) + 1);
max = Math.max(max, hashMap.get(key));
}
cnt = Math.max(cnt, max + 1);
}
return cnt;
}
// seek a and b Maximum common divisor of
public int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
边栏推荐
- Abnova丨E (DIII) (WNV) 重组蛋白 中英文说明书
- Traps in the explode function in PHP
- Phpstudy Xiaopi's MySQL Click to start and quickly flash back. It has been solved
- Abnova blood total nucleic acid purification kit pre installed relevant instructions
- Chemical properties and application instructions of prosci Lag3 antibody
- 模式-“里氏替换原则”
- 字典树简单入门题(居然是蓝题?)
- Clion-MinGW编译后的exe文件添加ico图标
- 清除app data以及获取图标
- Simple getting started example of Web Service
猜你喜欢

Abnova丨E (DIII) (WNV) 重组蛋白 中英文说明书

解析创客教育的知识迁移和分享精神

Abnova CRISPR spcas9 polyclonal antibody protocol

解析五育融合之下的steam教育模式

PHP deserialization +md5 collision

Duchefa low melting point agarose PPC Chinese and English instructions

【案例】定位的运用-淘宝轮播图

示波器探头对信号源阻抗的影响

实现浏览页面时校验用户是否已经完成登录的功能

Chemical properties and application instructions of prosci Lag3 antibody
随机推荐
Abnova DNA marker high quality control test program
请查收.NET MAUI 的最新学习资源
中国的软件公司为什么做不出产品?00后抛弃互联网;B站开源的高性能API网关组件|码农周刊VIP会员专属邮件周报 Vol.097
研學旅遊實踐教育的開展助力文旅產業發展
挖财商学院给的证券账户安全吗?可以开户吗?
Is it necessary for bazel to learn
判断横竖屏的最佳实现
Monorepo management methodology and dependency security
AITM 2-0003 水平燃烧试验
PHP deserialization +md5 collision
Mode - "Richter replacement principle"
10000+ 代码库、3000+ 研发人员大型保险集团的研发效能提升实践
研学旅游实践教育的开展助力文旅产业发展
Influence of oscilloscope probe on signal source impedance
Introduction to TS, constructor and its this, inheritance, abstract class and interface
树莓派4B上ncnn转换出来的模型调用时总是崩溃(Segment Fault)的原因
Abnova total RNA Purification Kit for cultured cells Chinese and English instructions
使用WebAssembly在浏览器端操作Excel
Is it safe to open a stock account by mobile phone? My home is relatively remote. Is there a better way to open an account?
Monorepo管理方法论和依赖安全