LeetCode 289.生命游戏————2024 春招冲刺百题计划

根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。

给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

  1. 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
  2. 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
  3. 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
  4. 如果死细胞周围正好有三个活细胞,则该位置死细胞复活;

下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。

在这里插入图片描述
输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]
输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]
思路
一年多没做人都傻了啊啊啊啊啊
本题主要用
原地算法:基本不占用额外空间,在不改变原本数据附带的信息的条件下,为数据附上新的信息。
答案
好像会比一般的多跑4ms,为什么为什么?

class Solution {
public:void gameOfLife(vector<vector<int>>& board) {//00:死死,01:活死,10:死活,11活活 改变后改变前int n = board.size();int m = board[0].size();int d[8][2] = {{1,0},{0,1},{1,1},{-1,0},{0,-1},{-1,-1},{1,-1},{-1,1}};for(int i = 0; i < n; i ++){for(int j = 0; j < m; j++){int cnt = 0;        	for(int k = 0; k < 8; k++){if((i+d[k][0] >= 0)&&(i+d[k][0] < n)&&(j+d[k][1] >= 0)&&(j+d[k][1] < m)){cnt += board[i+d[k][0]][j+d[k][1]]&1;//只考虑最末位,即上一个状态} }if(board[i][j]) board[i][j] = (cnt == 2||cnt == 3)?3:1;else board[i][j] = cnt == 3?2:0;}}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){board[i][j] >>= 1;}}}
};

官方答案

class Solution {// 状态用2bit表示,最末位为0表示现在死亡,倒数第二位为0表示下一时刻死亡// 00:死 01:活变死 10:死变活 11:活int rows;int cols;public void gameOfLife(int[][] board) {if (board == null || board[0] == null) {return;}rows = board.length;cols = board[0].length;// 第一轮遍历:计算每个细胞下一时刻状态for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {int liveNum = getLiveNum(board, row, col);if (board[row][col] == 1) {  // 规则1、2、3,即判断活细胞下一时刻状态board[row][col] += (liveNum == 2 || liveNum == 3) ? 2 : 0;}else {  // 规则4,即判断死细胞下一时刻状态board[row][col] += liveNum == 3 ? 2 : 0;}}}// 第二轮遍历:变更每个细胞的状态for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {board[row][col] >>= 1;}}}private int getLiveNum(int[][] board, int row, int col) {int liveNum = 0;int[][] posList = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};for (int[] pos : posList) {int x = row + pos[0];int y = col + pos[1];if (x < 0 || x >= rows || y < 0 || y >= cols){continue;}liveNum += board[x][y] & 1;  // 只考虑最末位,即当前状态}return liveNum;}
}

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

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

相关文章

鹅厂实习offer

#转眼已经银四了&#xff0c;你收到offer了吗# 本来都打算四月再投实习了&#xff0c;突然三月初被wxg捞了&#xff08;一年前找日常实习投的简历就更新了下&#xff09;&#xff0c;直接冲了&#xff0c;流程持续二十多天&#xff0c;结果是运气还不错&#xff0c;应该是部门比…

2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024)

2024年光学通信和物联网、自动化控制和大数据国际会议(OCITACB2024) 会议简介 2024年国际光通信与物联网、自动控制和大数据会议&#xff08;OCITACB2024&#xff09;的主要目标是促进光通信与物联网、自动管理和大数据领域的研发活动。另一个目标是促进研究人员、开发人员、工…

用three.js做一个3D汉诺塔游戏(下)

为桌台添加材质纹理 为物体添加适当的材质纹理,可以使其视觉效果产生质的飞跃。接下来,我们将为桌台添加一种木质纹理,用到的纹理贴图来自Pixabay.com。 我们使用 TextureLoader 来加载纹理贴图,其 load 方法第1个参数为贴图的 URL 字符串,该方法返回一个纹理对象,可直…

Linux服务器上搭建深度学习环境(安装anaconda、创建虚拟环境、安装pytorch)

Linux服务器的搭配 Linux服务器上安装anaconda创建虚拟环境linux上安装pytorchxshell连接服务器 Linux服务器上安装anaconda 链接 创建虚拟环境 参考教程&#xff1a;此处 linux上安装pytorch 链接 xshell连接服务器 链接

科技动态人工智能应用太空探索生物科技

根据最新的科技资讯&#xff0c;以下是一些值得关注的科技动态&#xff1a; 人工智能领域 智能体热潮 &#xff1a;随着大模型的研发热潮&#xff0c;AI智能体的发展迅速&#xff0c;它们被用作认知核心&#xff0c;具备强大的学习和迁移能力。智能体的架构和交互方式也在不断进…

HTML — 弹性布局(1)

介绍 对于弹性布局&#xff0c;首先了解其概念。弹性布局&#xff0c;即flex box&#xff0c;是一种用于在容器中进行布局的CSS技术。它使得容器内的子元素能够以灵活的方式排列、对齐、分配空间&#xff0c;以便应对各种屏幕尺寸和设备类型。任何一个容器都可以指定为flex布局…

python课后习题三

题目&#xff1a; 解题过程&#xff1a; 模式A&#xff1a; num int(input("&#xff08;模式A&#xff09;输入数字&#xff1a;")) for i in range(num): for j in range(num): if j < i 1: …

MVP模式

1、创建数据库连接类&#xff1a; package com.db.mvp; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; //数据库连接类 public class DatabaseManager {private static DatabaseManager instance;private Connection connection…

flutter如何实现一个应用位于前台时全局页面每隔三分钟弹出一次一天最多弹出5次的GroMore半插屏广告,处于付费页和后台时停止

1&#xff0c;首先添加一个全局的生命周期监听类 class AppLifecycleObserver with WidgetsBindingObserver {bool IsCold false;bool isAgree false;void getIsCold() async {isAgree await SPManager().getBool(SPKeys.isAgreePrivacy, defaultValue: true);IsCold awai…

MQ的延迟队列

1&#xff0c;场景 1.定时发布文章 2.秒杀之后&#xff0c;给30分钟时间进行支付&#xff0c;如果30分钟后&#xff0c;没有支付&#xff0c;订单取消。 3.预约餐厅&#xff0c;提前半个小时发短信通知用户。 A -> 13:00 17:00 16:30 延迟时间&#xff1a; 7*30 * 60 * …

Linux_Debian学习笔记

文章目录 系统管理软件源Debian11debian11 ustc中国科技大学软件源debian11 清华大学软件源debian11 阿里云软件源 Debian12debian12 清华大学软件源 系统全局设置debian12 修改静态IP地址修改语言环境成中文 系统输入法Debian11 fcxe 安装rime中州韵五笔输入法 常用软件安装Do…

Python操作SQLite数据库

SQLite 是一种轻量级的数据库引擎&#xff0c;广泛用于嵌入式设备和小型应用程序。在Python中&#xff0c;SQLite 是一个流行的选择&#xff0c;因为它易于使用、快速、可靠&#xff0c;并且无需独立的服务器进程。本文将深入探讨如何使用 Python 操作 SQLite 数据库&#xff0…

Excel·VBA考勤打卡记录整理

看到一个帖子《excel吧-考勤一天四次打卡&#xff0c;快速找出缺卡》&#xff0c;每个人每天有4次打卡记录&#xff0c;需要整理出所有缺少的打卡记录 与之前的文章《ExcelVBA考勤打卡记录统计结果》结果形式类似 与之前的文章《ExcelVBA考勤打卡记录数据整理》查找上下班打卡…

Linux、Docker、Brew、Nginx常用命令

Linux、Docker、Brew、Nginx常用命令 Linuxvi编辑器文件操作文件夹操作磁盘操作 DockerBrewNginx参考 Linux vi编辑器 Vi有三种模式。命令模式、输入模式、尾行模式&#xff0c;简单的关系如下&#xff1a; i -- 切换到输入模式&#xff0c;在光标当前位置开始输入文本。&a…

【go从入门到精通】初识struct结构体

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

Flutter中工厂方法的多种实现方法与使用场景分析

在Flutter应用程序的开发中&#xff0c;使用工厂方法是一种常见的设计模式&#xff0c;它可以帮助我们更好地组织和管理代码&#xff0c;提高代码的可读性和可维护性。本文将介绍Flutter中工厂方法的多种实现方法&#xff0c;并分析其在不同场景下的使用情况。 什么是工厂方法…

虚拟网络设备性能优化

在现代网络架构中&#xff0c;虚拟网络设备扮演着越来越重要的角色&#x1f310;&#xff0c;特别是在云计算☁️和容器化技术&#x1f4e6;广泛应用的背景下。虚拟网络设备如虚拟以太网设备&#xff08;veth&#xff09;、虚拟交换机&#xff08;vSwitch&#xff09;、和虚拟路…

【阅读笔记】《同意》

未成年幼女与男恋童癖的故事 作者: [法]瓦内莎斯普林格拉 翻译&#xff1a;李溪月 kindle看的电子书 笔记 传记形式的书。作者记录了14岁时与一个50岁的恋童癖患者进行第一次性行为的经历以及前后的故事。 恋童癖被作者命名为“G”&#xff0c;作者自称“M”&#xff0c;G是…

适用于 Mac 的 10 大数据恢复工具,具有优点、缺点

数据丢失很常见&#xff0c;并且可能由于许多不同的原因而发生。这种情况在我和我们团队的其他成员身上发生过很多次&#xff0c;即使我们格外小心我们的个人存储设备。 幸运的是&#xff0c;数据恢复软件在大多数情况下都可以工作。但是&#xff0c;由于数据丢失场景彼此之间…

arcgis10.x创建镶嵌数据集

在ArcGIS中创建新的镶嵌数据集的步骤如下&#xff1a;打开ArcGIS软件&#xff0c;并在工具箱中选择“Data Management Tools.tbx”→“Raster”→“Mosaic Dataset”→“Create Mosaic Dataset”。在弹出的窗口中&#xff0c;配置镶嵌数据集的地理数据库位置、名称和坐标系…