Leetcode Max Points on a Line
2016-06-07 21:45
489 查看
Given n points
on a 2D plane, find the maximum number of points that lie on the same straight line.
Difficulty: Hard
Solution: Traverse every pair of points, if their slope are the same, they will be on the same line. Build a hashtable to record it.
/**
* Definition for a point.
* class Point {
* int x;
* int y;
* Point() { x = 0; y = 0; }
* Point(int a, int b) { x = a; y = b; }
* }
*/
import java.util.Hashtable;
import java.util.Enumeration;
public class Solution {
public int maxPoints(Point[] points) {
int res = 0;
if(points.length == 0)
return 0;
if(points.length == 1)
return 1;
if(points.length == 2)
return 2;
for(int i = 0; i < points.length - 1; i++){
int x1 = points[i].x;
int y1 = points[i].y;
Hashtable<Double, Integer> maps = new Hashtable<Double, Integer>();
//Hashtable<double, Integer> maps = new Hashtable<double, Integer>();
int ver = 0, par = 0;
int general = 0;
for(int j = i + 1; j < points.length; j++){
if(x1 == points[j].x && y1 == points[j].y){
general++;
continue;
}
if(x1 == points[j].x){
ver++;
continue;
}
if(y1 == points[j].y){
par++;
continue;
}
double k = ((double)(points[j].y - y1)) / ((double)(points[j].x - x1));
if(!maps.containsKey(k)){
maps.put(k, 1);
}
else{
maps.put(k, maps.get(k) + 1);
}
}
Enumeration<Double> enumKey = maps.keys();
int ans = 0;
while(enumKey.hasMoreElements()) {
double key = enumKey.nextElement();
int val = maps.get(key);
ans = Math.max(val, ans);
}
ans = Math.max(ans, ver);
ans = Math.max(ans, par);
res = Math.max(ans + general + 1, res);
}
return res;
}
}
on a 2D plane, find the maximum number of points that lie on the same straight line.
Difficulty: Hard
Solution: Traverse every pair of points, if their slope are the same, they will be on the same line. Build a hashtable to record it.
/**
* Definition for a point.
* class Point {
* int x;
* int y;
* Point() { x = 0; y = 0; }
* Point(int a, int b) { x = a; y = b; }
* }
*/
import java.util.Hashtable;
import java.util.Enumeration;
public class Solution {
public int maxPoints(Point[] points) {
int res = 0;
if(points.length == 0)
return 0;
if(points.length == 1)
return 1;
if(points.length == 2)
return 2;
for(int i = 0; i < points.length - 1; i++){
int x1 = points[i].x;
int y1 = points[i].y;
Hashtable<Double, Integer> maps = new Hashtable<Double, Integer>();
//Hashtable<double, Integer> maps = new Hashtable<double, Integer>();
int ver = 0, par = 0;
int general = 0;
for(int j = i + 1; j < points.length; j++){
if(x1 == points[j].x && y1 == points[j].y){
general++;
continue;
}
if(x1 == points[j].x){
ver++;
continue;
}
if(y1 == points[j].y){
par++;
continue;
}
double k = ((double)(points[j].y - y1)) / ((double)(points[j].x - x1));
if(!maps.containsKey(k)){
maps.put(k, 1);
}
else{
maps.put(k, maps.get(k) + 1);
}
}
Enumeration<Double> enumKey = maps.keys();
int ans = 0;
while(enumKey.hasMoreElements()) {
double key = enumKey.nextElement();
int val = maps.get(key);
ans = Math.max(val, ans);
}
ans = Math.max(ans, ver);
ans = Math.max(ans, par);
res = Math.max(ans + general + 1, res);
}
return res;
}
}
相关文章推荐
- 字节、字符、ASCII码、UTF-8编码
- SQL基本结构化查询语句
- Java中toString()用法
- leetcode 290 Word Pattern C++
- 科普:x64与IA64
- C/C++ 水仙花数
- 【转】【复】string类的运算符重载
- -webkit-tap-highlight-color 学习
- 【REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式
- 圆柱类的设计
- LintCode(105) 复制带随机指针的链表
- intellij的maven工程"Server IPC version 9 cannot communicate with client version"错误的解决办法
- 拾遗系列(三)屏幕适配:Autolayout
- vc中动态设置属性页字体
- CasperJS基于PhantomJS抓取页面
- 站立会议07(第二期)
- 第3章 正则表达式1
- C/C++ 完全数
- 【转】【复】实现复数中的运算符重载
- 在web.xml中配置diaplay-name是什么意思