title: Weekly-Contest-403
date: 2024-06-16
Contest: leetcode
status: DONE
tags: Contest
Rank: 1865
Total: 3112
Credits: 7
T1: Accepted
T2: Accepted
T3: New Complement
T4: New Complement
author: AllenYGY
publish: True
#双指针
维护最小值
class Solution {
public:
double minimumAverage(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n =nums.size();
int ans=(nums[0]+nums[n-1]);
for(int i =0,j=n-1;i<j;i++,j--){
ans=min(ans,(nums[i]+nums[j]));
}
return ans/2.0;
}
};
class Solution {
public:
int minimumArea(vector<vector<int>>& grid) {
if (grid.empty() || grid[0].empty()) return 0;
int rows = grid.size();
int cols = grid[0].size();
int min_row = rows, max_row = -1;
int min_col = cols, max_col = -1;
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < cols; ++c) {
if (grid[r][c] == 1) {
min_row = min(min_row, r);
max_row = max(max_row, r);
min_col = min(min_col, c);
max_col = max(max_col, c);
}
}
}
if (min_row == rows || max_row == -1) return 0;
int height = max_row - min_row + 1;
int width = max_col - min_col + 1;
return height * width;
}
};
枚举六种排列情况
分别调用 T2 的计算方法求出最小面积
class Solution {
vector<vector<int>> rotate(vector<vector<int>>& a) {
int m = a.size();
int n = a[0].size();
vector<vector<int>> b(n, vector<int>(m));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
b[j][m - 1 - i] = a[i][j];
}
}
return b;
}
int minimumArea(vector<vector<int>>& a, int u, int d, int l, int r) {
int left = a[0].size(), right = 0, top = a.size(), bottom = 0;
for (int i = u; i < d; i++) {
for (int j = l; j < r; j++) {
if (a[i][j] == 1) {
left = min(left, j);
right = max(right, j);
top = min(top, i);
bottom = i;
}
}
}
return (right - left + 1) * (bottom - top + 1);
}
int f(vector<vector<int>>& a) {
int ans = INT_MAX;
int m = a.size();
int n = a[0].size();
if (m >= 3) {
for (int i = 1; i < m; i++) {
for (int j = i + 1; j < m; j++) {
// 图片上左
int area = minimumArea(a, 0, i, 0, n);
area += minimumArea(a, i, j, 0, n);
area += minimumArea(a, j, m, 0, n);
ans = min(ans, area);
}
}
}
if (m >= 2 && n >= 2) {
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
// 图片上中
int area = minimumArea(a, 0, i, 0, n);
area += minimumArea(a, i, m, 0, j);
area += minimumArea(a, i, m, j, n);
ans = min(ans, area);
// 图片上右
area = minimumArea(a, 0, i, 0, j);
area += minimumArea(a, 0, i, j, n);
area += minimumArea(a, i, m, 0, n);
ans = min(ans, area);
}
}
}
return ans;
}
public:
int minimumSum(vector<vector<int>>& grid) {
auto g = rotate(grid);
return min(f(grid), f(g));
}
};