LeetCode 289. 生命游戏(位运算)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 复制数组解法
      • 2.2 原地解法
      • 2.3 位运算

1. 题目

链接:289. 生命游戏

2. 解题

2.1 复制数组解法

很简单,按照题意模拟即可

class Solution {
public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;vector<vector<int>> cp(board);//复制数组法int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && cp[x][y])live++;}if(cp[i][j]){if(live < 2 || live > 3)board[i][j] = 0;}else{if(live == 3)board[i][j] = 1;}}}}
};

在这里插入图片描述

2.2 原地解法

  • 原来是1,标记成0,用2表示(等于1或者2,原状态都是1)
  • 原来是0,标记成1,用3表示(等于0或者3,原状态都是0)
  • 处理完后,改写数组
  • 等于2的,赋值为0
  • 等于3的,赋值为1
class Solution {
public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && (board[x][y]==1 || board[x][y]==2))live++;}if(board[i][j]){if(live < 2 || live > 3)board[i][j] = 2;}else{if(live == 3)board[i][j] = 3;}}}for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(board[i][j] == 2)board[i][j] = 0;else if(board[i][j] == 3)board[i][j] = 1;}}}
};

2.3 位运算

  • 利用数值的低位作为原数据
  • 高位保存周围存活的数量
class Solution {
public:void gameOfLife(vector<vector<int>>& board) {if (board.empty())return;int m = board.size(), n = board[0].size(), i, j, k, x, y, live;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};        for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {for (k = 0; k < 8; ++k) {x = i + nearby[k][0];y = j + nearby[k][1];if (x >= 0 && x < m && y >= 0 && y < n)board[i][j] += (board[x][y] & 1) << 1;}}}for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {live = board[i][j] >> 1;if (live < 2 || live > 3) board[i][j] = 0;else if (live == 3)board[i][j] = 1;elseboard[i][j] &= 1;}}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | S3QLRDF: 用于大规模RDF数据分布式SPARQL查询的关系分割架构

笔记整理 | 孙磊&#xff0c;天津大学硕士。动机RDF形式的语义网的繁荣对高效、可伸缩以及分布式的存储和高可用和容错并行策略都有着要求。RDF数据的飞速增长提升了在分布式数据管理系统上高效划分策略的需求来提升SPARQL查询性能。亮点本文提出了新的用于RDF的关系分割架构Pr…

美团DSP广告策略实践

近年来&#xff0c;在线广告在整个广告行业的比重越来越高。在线广告中实时竞价的广告由于其良好的转化效果&#xff0c;占有的比重逐年升高。DSP&#xff08;Demand-Side Platform&#xff09;[1]作为需求方平台&#xff0c;通过广告交易平台&#xff08;AdExchange&#xff0…

推荐几个出论文的好方向

如果你准备发AI方向的论文&#xff0c;或准备从事科研工作或已在企业中担任AI算法岗的工作。那么我真诚的向大家推荐&#xff0c;贪心学院《高阶机器学习研修班》&#xff0c;目前全网上应该找不到类似体系化的课程。课程精选了四大主题进行深入的剖析讲解&#xff0c;四个模块…

LeetCode 414. 第三大的数

1. 题目 给定一个非空数组&#xff0c;返回此数组中第三大的数。如果不存在&#xff0c;则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1.示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的…

论文浅尝 - ICLR2021 | BERTology 遇上生物学:在蛋白质语言模型中解释注意力

来源&#xff1a;ICLR2021链接&#xff1a;https://arxiv.org/abs/2006.15222v3一.动机Transformer架构已经被证明可以学习有用的蛋白质分类和生成任务表示。然而&#xff0c;在可解释性方面存在挑战。二.亮点本文通过attention分析蛋白质Transformer模型&#xff0c;通过atten…

Vuex框架原理与源码分析

Vuex是一个专为Vue服务&#xff0c;用于管理页面数据状态、提供统一数据操作的生态系统。它集中于MVC模式中的Model层&#xff0c;规定所有的数据操作必须通过 action - mutation - state change 的流程来进行&#xff0c;再结合Vue的数据视图双向绑定特性来实现页面的展示更新…

在错误的数据上,刷到 SOTA 又有什么意义?

文 | Severus编 | 小轶小编注&#xff1a;前段时间&#xff0c;小屋介绍了吴恩达老师近期发起的以数据为中心的 AI 竞赛&#xff08;参见《吴恩达发起新型竞赛范式&#xff01;模型固定&#xff0c;只调数据&#xff1f;&#xff01;》&#xff09;。吴恩达老师认为&#xff1a…

论文浅尝 | BoxE:一种基于Box的知识图谱表示学习模型

笔记整理 | 耿玉霞&#xff0c;浙江大学直博生。研究方向&#xff1a;知识图谱&#xff0c;零样本学习等。论文链接: https://arxiv.org/pdf/2007.06267.pdf本文是发表在NeurIPS 2020上的一篇基于Box的知识图谱表示学习模型的文章。在以往知识图谱表示学习&#xff08;KG Embe…

LeetCode 127. 单词接龙(图的BFS/双向BFS)

文章目录1. 题目2. 图的BFS解题2.1 单向BFS2.2 双向BFS &#xff01;厉害了1. 题目 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典&#xff0c;找到从 beginWord 到 endWord 的最短转换序列的长度。 转换需遵循如下规则&#xff1a; 每次转换只能改变…

Leaf——美团点评分布式ID生成系统

在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中&#xff0c;数据日渐增长&#xff0c;对数据分库分表后需要有一个唯一ID来标识一条数据或消息&#xff0c;数据库的自增ID显然不能满足…

@开发者,第二届马栏山杯国际音视频算法大赛高分攻略请查收,心动大奖等你来战!...

一秒让墙上的广告消失&#xff0c;保留完整墙面&#xff1b;户外大屏幕显示LOGO被擦除后&#xff0c;背景毫不违和……欢迎来到魔法世界——停&#xff01;这其实并不是什么魔法&#xff0c;而是由弗吉尼亚理工大学提出的基于流的视频补全算法FGVC的一项应用。作为视频的“橡皮…

论文小综 | Attention in Graph Neural Networks

作者 | 方尹、杨海宏&#xff0c;浙江大学在读博士&#xff0c;主要研究方向为图表示学习近年来&#xff0c;图卷积神经网络(Graph Convolutional Network, GCN)利用图卷积从图结构数据中提取特征&#xff0c;成功应用于节点分类、图分类、链接预测等任务&#xff0c;用途广泛。…

LeetCode 126. 单词接龙 II(图的BFS)

1. 题目 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典 wordList&#xff0c;找出所有从 beginWord 到 endWord 的最短转换序列。 转换需遵循如下规则&#xff1a; 每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。 说明: 如果…

外卖订单量预测异常报警模型实践

外卖业务的快速发展对系统稳定性提出了更高的要求&#xff0c;每一次订单量大盘的异常波动&#xff0c;都需要做出及时的应对&#xff0c;以保证系统的整体稳定性。如何做出较为准确的波动预警&#xff0c;显得尤为重要。 从时间上看&#xff0c;外卖订单量时间序列有两个明显的…

聊一聊“超大模型”

文 | 金雪锋源 | 知乎最近经常被问&#xff0c;你看“万亿的模型都出来了&#xff0c;你们训练的千亿模型是不是落伍了&#xff1f;”我想说&#xff1a;“虽然都叫超大模型&#xff0c;但是类型是不一样的&#xff0c;虽说每一类模型训出来都不容易&#xff0c;不过澄清一下概…

技术动态 | 不确定性知识图谱的表示和推理

本文转载自漆桂林知乎。作者 | 张嘉韬、漆桂林、吴天星文章链接 | https://zhuanlan.zhihu.com/p/369068016

LeetCode 665. 非递减数列(双指针)

1. 题目 给定一个长度为 n 的整数数组&#xff0c;你的任务是判断在最多改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中所有的 i (1 < i < n)&#xff0c;满足 array[i] < array[i 1]。…

数据还是模型?人类知识在深度学习里还有用武之地吗?

文 | Severus编 | 小戏近些年来&#xff0c;随着数据量越来越多&#xff0c;算力价格越来越便宜&#xff0c;根植于数据算力的深度学习茁壮成长。在这种背景下&#xff0c;作为一种强有力的表示学习方法的深度学习让人们惊讶的发现&#xff0c;只要投喂足够多的数据&#xff0c…

LeetCode 130. 被围绕的区域(图的BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个二维的矩阵&#xff0c;包含 ‘X’ 和 ‘O’&#xff08;字母 O&#xff09;。 找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: X X X X X O O X X X O X X O X X 运行你的…

论文浅尝 - ECIR2021 | 两种实体对齐方法的严格评估

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生来源: ECIR 2021在这篇工作中&#xff0c;作者对两种SOTA实体对齐方法做了广泛的研究&#xff1a;首先仔细分析了现有benchmark的过程&#xff0c;并论证了其中存在一些缺陷&#xff0c;使得原始方法给出的实验结果之间可能存在不可…