解题思路:
这道题目的难点在于如何判断一个矩形,网上也有很多方法。
对于给定的四个点,可以判断其四个顶点是否是直角,或者先求出中心点,矩形中每个点到中心点的距离是相等的。
下面给出的程序的逻辑是:暴力遍历每三个顶点,先判断其是否构成两条垂直的边,如果垂直的话,就去找第四个顶点,通过一个 unordered_set 查找,即可知道points数组中是否存在第四个点。
判断是否垂直:向量内积为0
求第四个点:向量运算
class Solution {
public:
double minAreaFreeRect(vector<vector<int>>& points) {
int n = points.size();
if(n < 4) return 0;
unordered_set<string> h;
for(int i = 0; i < points.size(); i++){
h.insert(to_string(points[i][0]) + " " + to_string(points[i][1]));
}
double res = INT_MAX;
for(int i = 0; i < n; i++){