leetcode939.MinimumAreaRectangle
阿新 • • 發佈:2018-12-21
參考:https://leetcode.com/problems/minimum-area-rectangle/discuss/192759/Simple-AF-JAVA-solution-with-explanation-O(n2) 題目:給出一個xy平面,座標面上有若干點,求這些點構成的最小矩形面積,要去矩形長寬分別與xy軸平行。 輸入:一個二維陣列(點集) 輸出:一個整數(最小矩形面積) 別人思路:用set集合把所有點儲存起來,然後遍歷點集,每次取倆點(x1,y1)和(x2,y2)作為矩形的對角線上你的兩個點。 然後判斷另外兩個點(x1,y2)和(x2,y1)是否也在點集中。若在,則這四個點可以構成矩形,可求得面積, 依次類推,求出所有矩形面積後,選擇最小的即可。
public class Medium_939_MinimumAreaRectangle {
int x ;
int y ;
public Medium_939_MinimumAreaRectangle(int x, int y){
this.x = x ;
this.y = y ;
}
@Override
public boolean equals(Object object){
return ((Medium_939_MinimumAreaRectangle)object).x==this .x && ((Medium_939_MinimumAreaRectangle)object).y == this.y ;
}
@Override
public int hashCode(){
return Objects.hash(x,y) ;
}
}
class Solution {
Set<Medium_939_MinimumAreaRectangle> set = new HashSet<Medium_939_MinimumAreaRectangle>() ;
int min = Integer. MAX_VALUE ;
int area = 0 ;
public int minAreaRect(int[][] points) {
for(int i=0;i<points.length;i++){
set.add(new Medium_939_MinimumAreaRectangle(points[i][0], points[i][1])) ;
}
for(int i=0;i<points.length;i++){
for(int j=i+1;j<points.length;j++){
int x1 = points[i][0] ;
int y1 = points[i][1] ;
int x2 = points[j][0] ;
int y2 = points[j][1] ;
Medium_939_MinimumAreaRectangle node1 = new Medium_939_MinimumAreaRectangle(x1,y2) ;
Medium_939_MinimumAreaRectangle node2 = new Medium_939_MinimumAreaRectangle(x2,y1) ;
if(set.contains(node1)&&set.contains(node2)){
area = Math.abs((x2-x1)*(y2-y1)) ;
if(area!=0 && min > area){
min = area ;
}
}
}
}
if(min == Integer.MAX_VALUE){
return 0 ;
}
return min ;
}
}