正反两次扫描|单调性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;

}

};

相关推荐
想吃火锅100523 分钟前
【leetcode】54. 螺旋矩阵
算法·leetcode·矩阵
想吃火锅100539 分钟前
【leetcode】300. 最长递增子序列
算法·leetcode·职场和发展
数模竞赛Paid answer1 小时前
2026年电工杯数学建模A题绿电直连型电氢氨园区优化运行求解全过程论文及程序
算法·数学建模·电工杯
疯狂打码的少年1 小时前
【数据结构】串的模式匹配:KMP算法(重点)
数据结构·笔记·算法
晚风醉蝶2 小时前
第零篇-算法全景图
算法
疯狂打码的少年2 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
webmote332 小时前
用 NVIDIA Nemotron 3 Super + .NET 构建有记忆的多轮对话
后端·算法
Keven_113 小时前
算法札记:区分稀疏图与稠密图在经验上的数学计算差异
算法·稠密图·稀疏图
Sagittarius_A*3 小时前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
DBA小马哥3 小时前
向量数据库入门到进阶:Embedding、ANN算法与RAG落地的关键术语
数据库·算法·embedding