当前位置:网站首页>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);
}
}
边栏推荐
- Binary search
- 重上吹麻滩——段芝堂创始人翟立冬游记
- WPF gets the control in the datagridtemplatecolumn of the specified row and column in the DataGrid
- 示波器探头对测量带宽的影响
- Specification of protein quantitative kit for abbkine BCA method
- Is the securities account given by the school of Finance and business safe? Can I open an account?
- Prosci LAG-3 recombinant protein specification
- 模式-“里氏替换原则”
- Abnova cyclosporin a monoclonal antibody and its research tools
- Is it necessary for bazel to learn
猜你喜欢

Graph embedding learning notes

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

PHP反序列化+MD5碰撞

Écrire une interface basée sur flask

XML建模

LeetCode_哈希表_困难_149. 直线上最多的点数

解读协作型机器人的日常应用功能

Who the final say whether the product is good or not? Sonar puts forward performance indicators for analysis to help you easily judge product performance and performance

XML modeling

培养机器人教育创造力的前沿科技
随机推荐
Sophomore personal development summary
Material design component - use bottomsheet to show extended content (II)
LeetCode: Distinct Subsequences [115]
使用WebAssembly在浏览器端操作Excel
Norgen AAV extractant box instructions (including features)
基于flask写一个接口
Learning notes of SAS programming and data mining business case 19
poj 3414 Pots (bfs+线索)
php中explode函数存在的陷阱
Implementation of redis unique ID generator
PHP deserialization +md5 collision
浅聊我和一些编程语言的缘分
Monorepo管理方法论和依赖安全
SYSTEMd resolved enable debug log
2. < tag hash table, string> supplement: Sword finger offer 50 The first character DBC that appears only once
Abnova丨培养细胞总 RNA 纯化试剂盒中英文说明书
Is Kai Niu 2980 useful? Is it safe to open an account
Duchefa cytokinin dihydrozeatin (DHZ) instructions
基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session
研學旅遊實踐教育的開展助力文旅產業發展