Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from these points, with sides parallel to the x and y axes.

If there isn't any rectangle, return 0.

Example 1:

Input: [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4
Example 2: Input: [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
Output: 2 Note: 1 <= points.length <= 500
0 <= points[i][0] <= 40000
0 <= points[i][1] <= 40000
All points are distinct.

核心思想是利用对角线的原理定下两个点,根据对角线在找到另外两个点

如何把一个array pair存到hash里,第一次我用了int -> string, 超时了

class Solution {
public int minAreaRect(int[][] points) {
if(points == null || points.length == 0 || points[0].length ==0){
return -1;
}
Set<String> set = new HashSet<>();
for(int[] point : points){
set.add(Integer.toString(point[0])+":"+Integer.toString(point[1]));
}
int min = Integer.MAX_VALUE;
for(int i = 0; i < points.length-1; i++){
for(int j = i+1; j < points.length; j++){
int [] pointA = points[i];
int [] pointB = points[j];
if(pointA[0] != pointB[0] && pointA[1] != pointB[1]){
if(set.contains(Integer.toString(pointA[0])+":"+Integer.toString(pointB[1])) && set.contains(Integer.toString(pointB[0])+":"+Integer.toString(pointA[1]))){
int cur = Math.abs((pointB[0] - pointA[0]) * (pointB[1] - pointA[1]));
if(cur < min){
min = cur;
}
}
}
}
}
if(min == Integer.MAX_VALUE){
return 0;
}
return min;
}
}

第二次看了别人的代码, 原来可以按照把每一个pair的x存成key,y轴存成一个hashset。

class Solution {
public int minAreaRect(int[][] points) {
if(points == null || points.length == 0 || points[0].length ==0){
return 0;
}
Map<Integer, Set<Integer>> map = new HashMap<>();
for(int[] point : points){
if(map.containsKey(point[0])){
map.get(point[0]).add(point[1]);
}
else{
Set<Integer> set = new HashSet<Integer>();
set.add(point[1]);
map.put(point[0], set);
}
} int min = Integer.MAX_VALUE;
for(int i = 0; i < points.length-1; i++){
for(int j = i+1; j < points.length; j++){
int [] pointA = points[i];
int [] pointB = points[j];
if(pointA[0] != pointB[0] && pointA[1] != pointB[1]){
if(map.get(pointA[0]).contains(pointB[1]) && map.get(pointB[0]).contains(pointA[1])){
int cur = Math.abs((pointB[0] - pointA[0]) * (pointB[1] - pointA[1]));
if(cur < min){
min = cur;
}
}
}
}
}
if(min == Integer.MAX_VALUE){
return 0;
}
return min;
}
}

最新文章

  1. 【Android】1.开发环境搭建
  2. B-Tree索引在sqlserver和mysql中的应用
  3. Tomcat端口被占用错误
  4. Qt实用小技巧(转)
  5. mysql 一些基础的语法和命令
  6. Brn系列商城4.1正式发布,欢迎大家下载体验
  7. Codeforces Round #199 (Div. 2) A Xenia and Divisors
  8. HDU 5583 Kingdom of Black and White 水题
  9. 集成支付宝SDK遇到的坑
  10. python基础之语句结束
  11. MyBatis动态代理
  12. 为什么我不推荐你使用vue-cli创建脚手架?
  13. 安卓Button-TextView-EditText综合运用
  14. 使用EF保存数据时 提示: 其他信息: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
  15. 微信浏览器发送ajax请求执行多次解决方法
  16. C# Aspose.Cells.dll Excel操作总结
  17. 浅析python日志重复输出问题
  18. ES Terms 聚合数据不确定性
  19. 使用json-org包实现POJO和json的转换
  20. Buffer I/O error on device sr0

热门文章

  1. asp.netmvc 三层搭建一个完整的项目
  2. nginx启用php
  3. struts2应用
  4. Creating and Destroying Objects
  5. js继承中,原型属性的继承探究
  6. centos /data目录扩容
  7. python列表的11种方法
  8. POJ 1065 Wooden Sticks (贪心)
  9. 【Python】数字驱动
  10. 前端笔记 (3.JavaScript 2)