leetcode957. N 天后的牢房(java-14天周期优化)

news2024/11/25 4:51:46

N 天后的牢房

  • leetcode957. N 天后的牢房
  • 题目描述
    • 解题思路
    • Java 代码演示
  • 算法专题

leetcode957. N 天后的牢房

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/prison-cells-after-n-days

题目描述

监狱中 8 间牢房排成一排,每间牢房可能被占用或空置。
每天,无论牢房是被占用或空置,都会根据以下规则进行变更:
如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。
否则,它就会被空置。
注意:由于监狱中的牢房排成一行,所以行中的第一个和最后一个牢房不存在两个相邻的房间。
给你一个整数数组 cells ,用于表示牢房的初始状态:如果第 i 间牢房被占用,则 cell[i]==1,否则 cell[i]==0 。另给你一个整数 n 。
请你返回 n 天后监狱的状况(即,按上文描述进行 n 次变更)。

示例 1:
输入:cells = [0,1,0,1,1,0,0,1], n = 7
输出:[0,0,1,1,0,0,0,0]
解释:下表总结了监狱每天的状况:
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

示例 2:
输入:cells = [1,0,0,1,0,0,1,0], n = 1000000000
输出:[0,0,1,1,1,1,1,0]

提示:
cells.length == 8
cells[i] 为 0 或 1
1 <= n <= 109

解题思路

讲解这个题之前先复习下二进制算法的异或算法:
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
0 ^ 0 = 0
推论: 0 ^ N = N ,N ^ N = 0 (N 代表整数)
当我们看到相邻的房间同时为0 或者同时为1 时,第二天是满的,也即是1,有没有想到用异或算法.
同时为0 或者 1 异或后还是0,再和1异或,就是1了,
如果相邻的两个房间是一个空的一个满的,那异或后就是1,再和1异或后,就是0了,
所以推出状态转移公式为:
i 和 j 代表天数和房间
DP[i][j] = DP[i-1][j-1] ^ DP[i-1][j+1] ^ 1(if 0<j<6),
DP[i][j] = 0 (if j0 or j7)

寻找周期
从第一天到第N天,第1个房间和第8个房间永远为闲置状态(状态为0)
设8个房间的第1天的状态为:s1, s2, s3, s4, s5, s6, s7, s8
那么接下来第1~N天,最左边的s1和最后边的s8永远是0
第1天状态为:0, s2, s3, s4, s5, s6, s7, 0
第2天第2个房间的状态为:0s31 = s3^1
第3天第3个房间的状态为:s31s3s51^1 = (s3s3)1s5(1^1) = 01s5^0 = s5^1

在这里插入图片描述
由推导可知,每14天为1个循环周期

Java 代码演示

    /**
     * N 天后的房间
     * @param cells
     * @param n
     * @return
     */
    public int[] prisonAfterNDays(int[] cells, int n) {
        //14 天一个周期,求余
        n = n % 14;
        //刚好整除时,代表最后一天
        if (n == 0){
            n = 14;
        }
        //记录下一天的情况,
        int[] newList = new int[cells.length];
        for (int day = 0;day < n;day++ ){
            for (int i = 1; i < cells.length - 1;i++){
                newList[i] = cells[i - 1] ^ cells[i + 1] ^ 1;
            }
            //把下一天的情况拷贝回去,进行下一次的判断
            cells = deepCopyList(newList);
        }
        return newList;
    }

    /**
     * 拷贝数组
     * @param cells
     * @return
     */
    private  int[] deepCopyList(int[]cells) {
       int[] newList = new int[cells.length];
       for (int i = 0; i < cells.length;i++){
           newList[i] = cells[i];
       }
        return newList;
    }

算法专题

leetcode464. 我能赢吗

leetcode97. 交错字符串

leetcode474. 一和零

leetcode583. 两个字符串的删除操作

leetcode514. 自由之路

leetcode72. 编辑距离

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

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

相关文章

力扣 106. 从中序与后序遍历序列构造二叉树

题目来源&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/ C题解&#xff1a;中序遍历是左中右&#xff0c;后序遍历是左右中&#xff0c;所以拿到两个遍历数组&#xff0c;我们可以从后序遍历获取中间节点…

信号链噪声分析6

目录 概要 整体架构流程 技术名词解释 技术细节 公用时钟源相位噪声的消除 公用电源噪声的消除 小结 概要 提示&#xff1a;这里可以添加技术概要 放大器输出被发送到均衡混频器&#xff08;相位检测器&#xff09;。相位检测器将两 个信号混合&#xff0c;在其输出处产生和积…

Apollo无人驾驶平台中多传感器标定

传感器标定是无人车最基础也是最核心的模块之一。作为软件层提供的第一项服务,标定质量和准确度极大地影响着感知、定位地图、PNC等模块。在 Apollo 开源自动驾驶平台中,我们提供了丰富的多传感器标定服务,如激光雷达、惯导、摄像头、多普勒雷达等多种传感器之间的标定。算法…

pytorch 中 dim 的-1,0,1,2 的意义 详解

对于3维矩阵&#xff0c;dim为-1时 与 dim为2时 的效果是一样的。dim为0时 从0维度&#xff0c; 下图 是三维实例 图的目的是 可以由一个想象的空间。 下面代码 与上图关系不大 >>> ab torch.tensor([[[0,1,2,3],[1,2,3,4]],[[2,3,4,5],[4,5,6,7]],[[5,6,7,8],…

如何解决failed to load steamui.dll这个问题?

当你在玩steam的时候&#xff0c;电脑突然弹出一个failed to load steamui.dll的时候&#xff0c;相信你内心一定是非常的烦躁的&#xff0c;毕竟你的玩游戏体验直接中断了&#xff0c;今天小编就来给大家详细的讲解一下怎么解决failed to load steamui.dll这个问题。 目录 一…

leetcode消失的数字

题目描述 数组 nums 包含从 0 到 n 的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在 O ( n ) O(n) O(n) 时间内完成吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2 leetcode链接&#xff1a;消失的数字 ⭕…

举例说明什么是卷积神经网络

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习模型&#xff0c;主要应用于计算机视觉任务&#xff0c;如图像分类、物体检测等。它通过卷积层、池化层和全连接层等组件来实现对图像的特征提取和分类。 现在我们以一个简单的图像分类任…

【算法题】动态规划中级阶段之跳跃游戏、最大子数组和、解码方法

动态规划中级阶段 前言一、最大子数组和1.1、思路1.2、代码实现 二、跳跃游戏2.1、思路2.2、代码实现 三、解码方法3.1、思路3.2、代码实现 总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优化问题的方法。它是…

计算机组成原理(期末或考研备考)- 存储器(RAM和ROM重点讲解)

存储器分类 主存储器&#xff1a;也称内存&#xff0c;存放正在运行程序和数据&#xff0c;CPU可以直接访问&#xff0c;容量存储较小&#xff0c;价格较贵。辅助存储器&#xff1a;也称外存&#xff08;绝大多数是磁盘&#xff09;&#xff0c;存放电脑的应用程序等&#xff0…

CentOS7使用Nginx部署前后端分离项目

CentOS7使用Nginx部署前后端分离项目 CentOS7安装使用Nginx1.安装1.1下载1.2 检验服务器上是否有nginx1.3 解压安装1.4 验证 2.部署2.1基本知识2.1.1常用命令2.1.2配置文件 2.2 配置效果前端后端 CentOS7安装使用Nginx 本文使用的nginx版本为1.22.1 Nginx发布版本分为主线版本…

Ant-Design 中a-transfer穿梭框 组件的使用

这段代码是一个包含模态框&#xff08;Modal&#xff09;和穿梭框&#xff08;Transfer&#xff09;的Vue组件。下面我会逐行解释代码的含义。 <a-modaltitle"合并":visible"visible"ok"handleOk"cancel"handleCancel"width"1…

基于51单片机串口加密系统(分主机从机)

目录 基于51单片机串口加密系统&#xff08;分主机从机&#xff09;一、原理图二、部分代码三、视频演示 基于51单片机串口加密系统&#xff08;分主机从机&#xff09; 功能&#xff1a; 1.通过两个单片机串口实现信息的加密和解密 2.按键完成信息的选择和发送 3.通过屏幕实时…

【Python】列表和元组

文章目录 一. 概念介绍二. 列表1. 创建列表2. 访问元素3. 切片操作4. 列表的遍历4.1 范围-for4.2 普通的 for 循环4.3 while 循环 5. 插入元素5.1 append() 方法5.2 insert() 方法 6. 删除元素6.1 pop() 方法6.2 remove() 方法 7. 查找元素7.1 in 和 not in 操作符7.2 index() …

【Linux】MHA高可用配置及故障切换

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MHA高可用配置及故障切换 MHA高可用配置及故障切换MHA概述MHA 的组成MHA 的特点 搭建 MySQL MHA1&#xff0e;Master、Slave1、Slave2 节点上安装 mysql5.72&#xff0e;修改…

电压放大器驱动感性负载有哪些特点

电压放大器是一种常见的信号放大器&#xff0c;广泛应用于各种电子设备。当电压放大器需要驱动感性负载时&#xff0c;需要采取一些特殊措施来确保系统的稳定和可靠性。 感性负载是指由电感器构成的电路元件&#xff0c;它在电路中起到了储存能量的作用。感性负载可以分为两类&…

Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

这个也是线上非常常见的一个问题&#xff0c;就是多客户端同时并发写一个 key&#xff0c;可能本来应该先到的 数据后到了&#xff0c;导致数据版本错了&#xff1b;或者是多客户端同时获取一个 key&#xff0c;修改值之后再写回去&#xff0c; 只要顺序错了&#xff0c;数据就…

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

阵列信号处理笔记 文章目录 阵列信号处理笔记阵列调向栅瓣调向对方向图的影响调向对HPBW的影响工程相关MATLAB代码阵列调向u域平移的动图 θ \theta θ域调向&#xff0c; θ 0 ∘ \theta 0^{\circ} θ0∘、 θ 6 0 ∘ \theta 60^{\circ} θ60∘、 θ 13 5 ∘ \theta 135^{\…

信号链噪声分析2

目录 概要 整体架构流程 技术名词解释 2.绘制信号链的简化原理图 技术细节 小结 概要 提示&#xff1a;这里可以添加技术概要 本文介绍对高速宽带宽信号链进行噪声性能理论分析的各个步骤。尽管选择了一个特 定信号链&#xff0c;但介绍的这些步骤适用于所有类型的信号链…

uniapp 引入腾讯地图解决H5端接口跨域

一、申请腾讯地图key 进入腾讯地图开放平台 二、引入腾讯地图 1. 安装 vue-jsonp npm install --save vue-jsonp 2.在 main.js 中使用 import { VueJsonp } from vue-jsonp; Vue.use(VueJsonp); 3.获取定位 // 获取当前位置 getLocation() {let _this this;uni.getLocation…

【C#】云LIS检验医学信息系统源码

系统基于云计算为医院机构改善患者服务质量提供了强有力的支持&#xff0c;“以患者为核心”这一理念得到了充分实现&#xff0c;基于云计算的高效区域医疗信息服务&#xff0c;会为医疗行业带来跨时代的变革。 一、使用技术框架说明 开发语言&#xff1a;C# 6.0、JavaScript …