news 2026/3/30 0:22:06

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/3/15 23:47:11

2小时极速指南:让老款Mac完美运行最新macOS系统

2小时极速指南&#xff1a;让老款Mac完美运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您是否正在为2012-2015年款的Mac设备无法升级到最新系统而困扰…

作者头像 李华
网站建设 2026/3/11 1:43:03

Kafdrop可视化工具终极指南:从零开始快速搭建Kafka监控平台

Kafdrop可视化工具终极指南&#xff1a;从零开始快速搭建Kafka监控平台 【免费下载链接】kafdrop Kafka Web UI 项目地址: https://gitcode.com/gh_mirrors/ka/kafdrop 你是否曾经为Kafka集群的复杂性感到头疼&#xff1f;面对命令行工具的繁琐操作&#xff0c;是否渴望…

作者头像 李华
网站建设 2026/3/24 13:33:51

如何快速掌握ZeroOmega:终极代理管理工具完整指南

如何快速掌握ZeroOmega&#xff1a;终极代理管理工具完整指南 【免费下载链接】ZeroOmega Manage and switch between multiple proxies quickly & easily. 项目地址: https://gitcode.com/gh_mirrors/ze/ZeroOmega 在当今复杂的网络环境中&#xff0c;ZeroOmega作为…

作者头像 李华
网站建设 2026/3/26 12:36:57

TFT Overlay云顶之弈辅助工具:7天从入门到精通的快速提升指南

TFT Overlay云顶之弈辅助工具&#xff1a;7天从入门到精通的快速提升指南 【免费下载链接】TFT-Overlay Overlay for Teamfight Tactics 项目地址: https://gitcode.com/gh_mirrors/tf/TFT-Overlay 还在为云顶之弈复杂的装备合成和羁绊搭配而烦恼吗&#xff1f;TFT Over…

作者头像 李华
网站建设 2026/3/16 8:04:19

SMAPI模组开发终极指南:从零开始打造你的星露谷世界

SMAPI模组开发终极指南&#xff1a;从零开始打造你的星露谷世界 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI SMAPI是星露谷物语官方推荐的模组API&#xff0c;它为游戏提供了强大的扩展能力&…

作者头像 李华
网站建设 2026/3/13 5:37:24

大模型杀疯了!2026国内LLM技术突破,程序员必学技能

国内大语言模型&#xff08;LLM&#xff09;研究与应用最新进展综述&#xff08;截至2026年1月&#xff09; 摘要&#xff1a;近年来&#xff0c;国内大语言模型&#xff08;Large Language Models, LLM&#xff09;在模型迭代、训练技术优化、场景落地等方面取得突破性进展&a…

作者头像 李华