首先理解题意,要求最小面积的正方形,其实就是找到一个正方形,能恰好把所有的点框住,并求出这个正方形的面积。
那么边输入数据边更新所有坐标的边界条件,最后再计算面积即可。
#include <climits>
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
int maxX = INT_MIN, minX = INT_MAX;
int maxY = INT_MIN, minY = INT_MAX;
int xi, yi;
// 更新最大最小横纵坐标
for (int i = 0; i < n; i++) {
cin >> xi >> yi;
maxX = max(maxX, xi);
minX = min(minX, xi);
maxY = max(maxY, yi);
minY = min(minY, yi);
}
// 计算横纵坐标差值
int xDiff = maxX - minX;
int yDiff = maxY - minY;
// 计算最小面积
cout << max(xDiff * xDiff, yDiff * yDiff) << endl;
}
return 0;
}
时间复杂度:O(n),遍历输入的数据
空间复杂度:O(1),仅使用了几个变量

京公网安备 11010502036488号