正反两次扫描|单调性cut

lc3047

遍历所有矩形对,计算每对矩形的交集区域,取++交集的宽高min++作为可能的正方形边长,记录最大边长并返回其平方值。

class Solution {

public:

long long largestSquareArea(vector<vector<int>>& bottomLeft, vector<vector<int>>& topRight) {

int max_side = 0;

for (int i = 0; i < bottomLeft.size(); i++) {

auto& b1 = bottomLefti;

auto& t1 = topRighti;

for (int j = 0; j < i; j++) {

auto& b2 = bottomLeftj;

auto& t2 = topRightj;

int width = min(t10, t20) - max(b10, b20);

int height = min(t11, t21) - max(b11, b21);

++int side = min(width, height);
max_side = max(max_side, side);
++

}

}

return 1LL * max_side * max_side;

}

};

单调性cut

class Solution {

public:

long long largestSquareArea(vector<vector<int>>& bottomLeft, vector<vector<int>>& topRight) {

int max_side = 0;

for (int i = 0; i < bottomLeft.size(); i++) {

auto& b1 = bottomLefti;

auto& t1 = topRighti;

++if (t10 - b10 <= max_side || t11 - b11 <= max_side)
continue;
++ // 最优性剪枝:max_side 不可能变大

for (int j = 0; j < i; j++) {

auto& b2 = bottomLeftj;

auto& t2 = topRightj;

int width = min(t10, t20) - max(b10, b20); // 右上横坐标 - 左下横坐标

int height = min(t11, t21) - max(b11, b21); // 右上纵坐标 - 左下纵坐标

int side = min(width, height);

max_side = max(max_side, side);

}

}

return 1LL * max_side * max_side;

}

};

lc3796

正反两次扫描

class Solution {

public:

int findMaxVal(int n, vector<vector<int>>& restrictions, vector<int>& diff) {

vector<int> max_val(n, INT_MAX);

for (auto& r : restrictions)

max_valr\[0] = r1;

vector<int> a(n);

for (int i = 0; i < n - 1; i++) {

ai + 1 = min(ai + diffi, max_vali + 1);

}

for (int i = n - 2; i > 0; i--) {

ai = min(ai, ai + 1 + diffi);

}

return ranges::max(a);

}

};

lc3795

hash+滑窗

class Solution {

public:

int minLength(vector<int>& nums, int k) {

unordered_map<int, int> cnt;

int sum = 0;

int left = 0;

int ans = INT_MAX;

for (int i = 0; i < nums.size(); i++) {

// 1. 入

int x = numsi;

cntx++;

if (cntx == 1)

sum += x;

while (sum >= k) {

// 2. 更新答案

ans = min(ans, i - left + 1);

// 3. 出

int out = numsleft;

cntout--;

if (cntout == 0)

sum -= out;

left++;

}

}

return ans == INT_MAX ? -1 : ans;

}

};

相关推荐
zander25817 分钟前
138. 随机链表的复制
数据结构·算法·链表
过期动态24 分钟前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面33 分钟前
栈在递归中的应用
数据结构·算法
8K超高清44 分钟前
博冠获中国电影电视技术学会科技进步奖
人工智能·科技·算法·安全·接口隔离原则·智能硬件
微石科技1 小时前
长期慢病如何做好居家管理?宁波微石科技星梦云康改善周期数据零散短板
大数据·科技·物联网·算法
微露清风1 小时前
快速排序算法学习记录
学习·算法·排序算法
梓䈑7 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
Adios7949 小时前
设置交集大小至少为2
数据结构·算法·leetcode