package main
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
func (_ Solution) MinimumAreaRectangle(points [][]int) int {
var height int
var width int
var responseArea int
type Point struct {
X int
Y int
}
pointMap := make(map[Point]bool)
for _, point := range points {
p := Point{
X: point[0],
Y: point[1],
}
pointMap[p] = true
}
for i := 0; i < len(points); i++ {
x1 := points[i][0]
y1 := points[i][1]
for j := i + 1; j < len(points); j++ {
x2 := points[j][0]
y2 := points[j][1]
if pointMap[Point{X: x1, Y: y2}] && pointMap[Point{X: x2, Y: y1}] && x1 != x2 && y1 != y2 {
width = abs(x2 - x1)
height = abs(y2 - y1)
area := width * height
if responseArea > area || responseArea == 0 {
responseArea = area
}
}
}
}
if responseArea > 0 {
return responseArea
}
return 0
}
bu masalani ishalshdan oldin X va Y oqlari va hamda kordinatalar orqali nuqtalarni topishni organib olishingiz kerak.
Unda bolsa men algoritmni tushuntiray
1) Point lar uchun struct yozib oldim
2) araydan birinchi juftlikni oldim va undan keyingi juftlikni ikkinchi for bilan
3) if bilan tekshirishni koraylik uyerda bunday bolgan bizda xozir 2 ta nuqta bor demak qolgan ikkta nuqatalrni shulardan kelib chiqib topishimiz kerak uning uchun Point uchun map orqali qidirishni oldim va nuqatalrni mos ravishda mapga berdim u menga bool qaytaradi va true bolsagin va yana bir tekshiruv nuqtalarning kordinatalari ozaro teng bolib qolmasligi kerak yani ustma ust tushib qolmasligi kerak
4) va if qanoatlantirilsagina heightni mos kordinatalarni bir biridan ayrib topamiz va widthni ham shunday
5) ularning kopaytmasi area ni beradi
areani hisoblashda ham eng kichigini olishimiz kerak shuning uchun, dastlab men ozgaruvchiga olganman eng kichigini ushlashlik uchun
xa oxirida return