当前位置:网站首页>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);
}
}
边栏推荐
- MySQL fully parses json/ arrays
- 使用WebAssembly在浏览器端操作Excel
- ODPS 下一个map / reduce 准备
- Norgen AAV extractant box instructions (including features)
- Learning robots have no way to start? Let me show you the current hot research directions of robots
- 线程池的使用
- Comparison table of foreign lead American abbreviations
- Abnova CRISPR spcas9 polyclonal antibody protocol
- Binary search
- Abnova DNA marker high quality control test program
猜你喜欢

珍爱网微服务底层框架演进从开源组件封装到自研

台风来袭!建筑工地该如何防范台风!

Cutting edge technology for cultivating robot education creativity

PVC 塑料片BS 476-6 火焰传播性能测定

线程池的使用

How to make ERP inventory accounts of chemical enterprises more accurate

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

基于vertx-web-sstore-redis的改造实现vertx http应用的分布式session

Interpreting the daily application functions of cooperative robots

2.<tag-哈希表, 字符串>补充: 剑指 Offer 50. 第一个只出现一次的字符 dbc
随机推荐
最长摆动序列[贪心练习]
学习机器人无从下手?带你体会当下机器人热门研究方向有哪些
Sophomore personal development summary
判断横竖屏的最佳实现
SQL series (basic) - Chapter 2 limiting and sorting data
Norgen AAV extractant box instructions (including features)
Wanglaoji pharmaceutical's public welfare activity of "caring for the most lovely people under the scorching sun" was launched in Nanjing
Abnova DNA marker high quality control test program
The Chinese Academy of Management Sciences gathered industry experts, and Fu Qiang won the title of "top ten youth" of think tank experts
序列联配Sequence Alignment
Matplotlib drawing retouching (how to form high-quality drawings, such as how to set fonts, etc.)
教你自己训练的pytorch模型转caffe(三)
ts 之 泛型
Sequence alignment
2. < tag hash table, string> supplement: Sword finger offer 50 The first character DBC that appears only once
vant 源码解析 event.ts 事件处理 全局函数 addEventListener详解
研學旅遊實踐教育的開展助力文旅產業發展
Interpreting the daily application functions of cooperative robots
解读协作型机器人的日常应用功能
解析创客教育的知识迁移和分享精神