news 2026/6/10 17:41:20

437贪心

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
437贪心

lc3459

memo与方向枚举,在二维网格中查找以1开头、1和2交替出现的最长对角线(含转向)路径长度

1. 确定参数与返回值:DFS参数包含当前位置 (i,j) 、移动方向 k 、转向权限 can_turn 、目标值 target ,返回以当前状态出发的最长交替路径长度。

2. 设置终止条件:计算移动后新位置,若越界或网格值不等于 target ,则路径终止,返回0。

3. 处理当前层逻辑:判断是否可读取记忆化缓存,若 can_turn 为 false 且缓存存在,直接返回缓存值避免重复计算。

4. 递归遍历下一层:先沿原方向递归计算路径长度并加1,若有转向权限,切换方向后再次递归,取两次递归结果的最大值。

5. 记忆化优化:当 can_turn 为 false 时,将当前递归计算的路径长度存入 memo[i][j][k] ,供后续相同状态直接调用

class Solution {
static constexpr int DIRS[4][2] = {{1, 1}, {1, -1}, {-1, -1}, {-1, 1}};

public:
int lenOfVDiagonal(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector memo(m, vector<array<int, 4>>(n));

auto dfs = [&](this auto&& dfs, int i, int j, int k, bool can_turn, int target) -> int {
i += DIRS[k][0];
j += DIRS[k][1];
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != target) {
return 0;
}
// 只在 can_turn=false 时读取和写入 memo
if (!can_turn && memo[i][j][k]) {
return memo[i][j][k];
}
int res = dfs(i, j, k, can_turn, 2 - target) + 1;
if (!can_turn) {
return memo[i][j][k] = res;
}
int maxs[4] = {m - i, j + 1, i + 1, n - j}; // 理论最大值(走到底)
k = (k + 1) % 4;
// 优化二:如果理论最大值没有超过 res,那么不递归
if (min(maxs[k], maxs[(k + 3) % 4]) > res) {
res = max(res, dfs(i, j, k, false, 2 - target) + 1);
}
return res;
};

int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] != 1) {
continue;
}
int maxs[4] = {m - i, j + 1, i + 1, n - j}; // 理论最大值(走到底)
for (int k = 0; k < 4; k++) { // 枚举起始方向
// 优化一:如果理论最大值没有超过 ans,那么不递归
if (maxs[k] > ans) {
ans = max(ans, dfs(i, j, k, true, 2) + 1);
}
}
}
}
return ans;
}
};

lc3457

贪心

要被舍弃的数尽可能的小

class Solution {

public:

long long maxWeight(vector<int>& pizzas) {

ranges::sort(pizzas, greater<int>());

int days = pizzas.size() / 4;

int odd = (days + 1) / 2;

long long ans = 0;

for (int i = 0; i < odd; i++)

ans += pizzas[i];

for (int i = 0; i < days / 2; i++) {

ans += pizzas[odd + i * 2 + 1];

}

return ans;

}

};

lc3456

class Solution {
public:
bool hasSpecialSubstring(string s, int k) {
int n = s.size();
int cnt = 0;
for (int i = 0; i < n; i++) {
cnt++;
if (i == n - 1 ||s[i] != s[i + 1]){
if (cnt == k)
return true;
cnt = 0;// try update后置0
}
}
return false;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:09:49

wxauto微信自动化终极指南:简单快速实现免费自动化操作

wxauto微信自动化终极指南&#xff1a;简单快速实现免费自动化操作 【免费下载链接】wxauto Windows版本微信客户端&#xff08;非网页版&#xff09;自动化&#xff0c;可实现简单的发送、接收微信消息&#xff0c;简单微信机器人 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/6/10 1:03:28

ScratchJr桌面版全方位指南:打造儿童编程启蒙第一课

ScratchJr桌面版全方位指南&#xff1a;打造儿童编程启蒙第一课 【免费下载链接】ScratchJr-Desktop Open source community port of ScratchJr for Desktop (Mac/Win) 项目地址: https://gitcode.com/gh_mirrors/sc/ScratchJr-Desktop 在数字化时代&#xff0c;编程已成…

作者头像 李华
网站建设 2026/5/14 5:44:11

DLSS Swapper终极指南:轻松管理游戏DLSS版本的免费神器

DLSS Swapper终极指南&#xff1a;轻松管理游戏DLSS版本的免费神器 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏中的DLSS版本管理而烦恼吗&#xff1f;想要在不同版本间自由切换却不知从何下手&#xff1…

作者头像 李华
网站建设 2026/5/31 12:33:35

连锁商家如何通过多门店管理系统打破信息孤岛?

如今零售行业朝向数字化转型&#xff0c;多门店管理成了连锁品牌以及实体商家提高运营效率、达成规模化扩张的核心课题。一套高效的多门店管理系统&#xff0c;可把处于不同地理位置分散的店铺连接成一个有机整体&#xff0c;达成数据、库存、会员以及营销的集中管控与智能协同…

作者头像 李华
网站建设 2026/6/10 16:05:58

CSDN博客下载器终极使用指南:从入门到精通

CSDN博客下载器终极使用指南&#xff1a;从入门到精通 【免费下载链接】CSDNBlogDownloader 项目地址: https://gitcode.com/gh_mirrors/cs/CSDNBlogDownloader CSDN博客下载器是一款强大的技术工具&#xff0c;专门用于批量下载CSDN平台上的博客文章到本地存储。无论你…

作者头像 李华
网站建设 2026/6/10 13:37:22

飞算 JavaAI 修复器 无限 tokens 赋能 80% 开发 Bug 极速扫清

Java 开发进程里&#xff0c;最令人挫败的时刻莫过于&#xff1a;代码逻辑刚梳理完毕&#xff0c;运行后控制台却瞬间被红色报错刷屏。一个不起眼的语法疏漏、一处深藏不露的逻辑漏洞&#xff0c;或是棘手的依赖冲突、SQL 语法错误&#xff0c;都足以让开发者陷入困境 —— 新手…

作者头像 李华