news 2026/6/10 17:12:11

博弈-翻转|hash<string>|smid

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
博弈-翻转|hash<string>|smid

lc267

回文排列

lc311

稀疏矩阵

预处理标记非0+二分

class Solution {
public:
vector<vector<int>> multiply(vector<vector<int>>& A, vector<vector<int>>& B) {
if (A.size() < 1 || B.size() < 1 || B[0].size() < 1) return {};
int m = A.size();
int n = A[0].size();
int k = B[0].size();
vector<vector<int>> a(m);
vector<vector<int>> b(k);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (A[i][j] != 0) a[i].push_back(j);
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < k; ++j) {
if (B[i][j] != 0) b[j].push_back(i);
}
}
vector<vector<int>> res(m, vector<int>(k, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < k; ++j) {
if (a[i].size() < 1 || b[j].size() < 1) continue;
auto ai = a[i].begin();
auto bi = b[j].begin();
//int cur_max = 0;
int sum = 0;
while (ai != a[i].end() && bi != b[j].end()) {
//cur_max = max(*ai, *bi);
if (*ai == *bi) {
sum += A[i][*ai] * B[*bi][j];
ai++;
bi++;
}
else {
if (*ai > *bi) bi = lower_bound(bi, b[j].end(), *ai);
else ai = lower_bound(ai, a[i].end(), *bi);
}
}
res[i][j] = sum;
}
}
return res;
}
};

暴力

//行列 对应位置 的乘积 和
res[r][c] += (mat1[r][j] * mat2[j][c]);

class Solution
{
public:
vector<vector<int>> multiply(vector<vector<int>>& mat1, vector<vector<int>>& mat2)
{
int r1 = mat1.size(), r2 = mat2.size();
if (r1 == 0 || r2 == 0)
return vector<vector<int>>{};
int c1 = mat1[0].size(), c2 = mat2[0].size();

vector<vector<int>> res(r1, vector<int>(c2, 0));

for (int r = 0; r < r1; r ++)
{
for (int c = 0; c < c2; c ++)
{
for (int j = 0; j < c1; j ++)//行列 对应位置 的乘积 和
{
res[r][c] += (mat1[r][j] * mat2[j][c]);
}
}
}
return res;
}
};

simd写法

行列遍历+跳过零元素+并行transform

逐元素累加实现矩阵乘法,计算ans[i][j] = mat1[i][l]*mat2[l][j]总和。

#include <execution>
class Solution {
public:
vector<vector<int>> multiply(vector<vector<int>>& mat1, vector<vector<int>>& mat2) {
int n = mat1.size(), k = mat2.size(), m = mat2[0].size();
vector ans(n, vector(m, 0));
for (int i = 0; i < n; ++i) {
for (int l = 0; l < k; ++l) {
int val = mat1[i][l];
if (!val) continue;
transform(execution::unseq, mat2[l].begin(), mat2[l].end(), ans[i].begin(), ans[i].begin(), [val](auto&& a, auto&& b) {return b + val * a;});
// ranges::transform(mat2[l], ans[i], ans[i].begin(), [val](auto&& a, auto&& b) { return b + val * a; });
}
}
return ans;
}
};

lc294

博弈论 memo 翻转

hash包装器

size_t h = hash<string>()(cur);

笔记一下没找到,大概就是注意无冲突的情况下,可以使用hash<string>()包装string

class Solution {
unordered_map<size_t, bool> memo;
public:
bool canWin(string &cur) {
size_t h = hash<string>()(cur);
if (memo.count(h))
return memo[h];

for (int i = 1; i < cur.size(); i++)
{
if (cur[i] == '+' && cur[i - 1] == '+')
{
cur[i] = cur[i - 1] = '-';
bool ans = canWin(cur);
cur[i] = cur[i - 1] = '+';//回溯

if (!ans)
return memo[h]=true;
//下一个不存在答案 那么上一个就为true
//博弈论
}
}
return memo[h]=false;
}
};

lc156

从下到上 重连后 记得置空

tnode* dfs 在找最左节点的过程中重连

class Solution {

public:

TreeNode* upsideDownBinaryTree(TreeNode* root)

{

if(!root || !root->left) return root;

auto dfs=[&](this auto&& dfs,TreeNode* node)->TreeNode*

{

if(!node->left)

return node;

auto mxl=dfs(node->left);

node->left->left=node->right;

node->left->right=node;

//从下到上 连好了后置空

node->left=nullptr;

node->right=nullptr;

return mxl;

};

return dfs(root);

//最左边 节点为根

}

};

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

5分钟打造专属编辑器:60+主题让你的编程环境焕然一新

5分钟打造专属编辑器&#xff1a;60主题让你的编程环境焕然一新 【免费下载链接】colour-schemes Colour schemes for a variety of editors created by Dayle Rees. 项目地址: https://gitcode.com/gh_mirrors/co/colour-schemes 还在忍受编辑器默认的单调配色吗&#…

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

SwiftUI布局终极指南:从IceCubesApp掌握自适应界面开发

SwiftUI布局终极指南&#xff1a;从IceCubesApp掌握自适应界面开发 【免费下载链接】IceCubesApp A SwiftUI Mastodon client 项目地址: https://gitcode.com/GitHub_Trending/ic/IceCubesApp 在当今移动应用开发中&#xff0c;SwiftUI布局技术已成为iOS开发者必备的核心…

作者头像 李华
网站建设 2026/6/10 15:36:47

.NET MAUI Android平台深度优化:从性能瓶颈到原生体验的进阶策略

.NET MAUI Android平台深度优化&#xff1a;从性能瓶颈到原生体验的进阶策略 【免费下载链接】maui dotnet/maui: .NET MAUI (Multi-platform App UI) 是.NET生态下的一个统一跨平台应用程序开发框架&#xff0c;允许开发者使用C#和.NET编写原生移动和桌面应用&#xff0c;支持…

作者头像 李华
网站建设 2026/6/10 11:07:23

终极指南:如何用AI大模型快速构建智能网页数据提取系统

终极指南&#xff1a;如何用AI大模型快速构建智能网页数据提取系统 【免费下载链接】llm-scraper Turn any webpage into structured data using LLMs 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-scraper 在当今信息爆炸的时代&#xff0c;你是否还在为从海…

作者头像 李华
网站建设 2026/6/10 15:36:46

java计算机毕业设计社区服务网站 基于SpringBoot的社区一站式服务平台 JavaWeb智慧社区在线服务系统

计算机毕业设计社区服务网站584it9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。居委会每天被“在哪开居住证明”“怎么申请老年证”“昨晚楼道灯坏了”这类电话包围&#xff0…

作者头像 李华
网站建设 2026/6/10 12:53:30

Rocket.Chat桌面应用终极指南:跨平台团队协作的完美解决方案

还在为团队沟通效率低下而烦恼吗&#xff1f;是否厌倦了在浏览器和各类通讯工具之间频繁切换&#xff1f;Rocket.Chat桌面应用正是你需要的答案。这款基于Electron框架开发的跨平台即时通讯工具&#xff0c;将为你带来前所未有的团队协作体验。 【免费下载链接】Rocket.Chat.El…

作者头像 李华