被锁总时间

 题目描述:

对一个事务进行加锁与解锁,其中有加锁数组,解锁数组,这两个数组长度相等,且数组内数据代表加锁与解锁的具体时间点,求给出数组中事务的总被锁时间。(其中加锁后默认在60秒后解锁;已加锁的情况下再加锁则解锁时间为新时间向后60秒处;未加锁情况下解锁依然是未加锁状态)

例:

加锁数组【1,30,32,100】,解锁数组【10,50,53,80】

答案:89

提示:9+20+60

 思路:(我将加锁数组定义为larr,解锁数组定义为uarr)

读完题目后我们大体思路为需要两个数组进行一一对比计算并求和得到总被锁时间;

我们清楚两个数组遍历时不会是同时向后走,因此会出现下面4种情况:

1.larr和uarr都走完了 

2.larr走完了,uarr没走完 

3.larr没走完,uarr走完了             

4.larr和uarr都没走完

因此对应的方法:

1.代表全部比较完成,我们采用递归来实现因此返回0即可。

2.larr走完,uarr没走完代表解锁时间在最后加锁时间之后,此时只需要返回0即可。

3.larr没走完,uarr走完了代表此次加锁时间在最后一次解锁时间之后,由于题目条件已加锁的情况下再加锁则解锁时间为新时间向后60秒处,因此我们需要将剩余加锁时间两两之间进行判断,之间相差60秒以上则为60,60秒以下则为相减之数,最后相加并再加60即为结果。

4.larr和uarr都没有走完则需要一一去对比判断,此时出现三种情况:

      4.1 larr[i] < uarr[j] 

      4.2 larr[i] > uarr[j] 

      4.3 larr[i] > uarr[j]

解法:

#include<iostream>  
using namespace std;

int gnum(int* lockarr, int* unlockarr, const int n, int i, int j)
{
	if (i == n && j != n)
	{
		return 0;
	}
	else if (i != n && j == n)
	{
		int num = 0;
		while (i != n)
		{
			if (i < n - 1)
			{
				if (lockarr[i + 1] - lockarr[i] >= 60)
				{
					num += 60;
				}
				else
				{
					num += lockarr[i + 1] - lockarr[i];
				}
			}
			i++;
		}
		return num + 60 + gnum(lockarr, unlockarr, n, i, j);
	}
	else if (i != n && j != n)
	{
		if (lockarr[i] < unlockarr[j])
		{
			int num = unlockarr[j] - lockarr[i];
			if (n >= 60)
			{
				num = 60;
			}
			while (lockarr[i] < unlockarr[j])
			{
				i++;
				if (i == n)
				{
					return num + gnum(lockarr, unlockarr, n, i, j);
				}
			}
			return num + gnum(lockarr, unlockarr, n, i, j);
		}
		else if (lockarr[i] > unlockarr[j])
		{
			while (lockarr[i] > unlockarr[j])
			{
				j++;
				if (j == n)
				{
					return gnum(lockarr, unlockarr, n, i, j);
				}
			}
			return gnum(lockarr, unlockarr, n, i, j);
		}
		else if (lockarr[i] == unlockarr[j])
		{
			return gnum(lockarr, unlockarr, n, i + 1, j + 1);
		}
	}
	else if (i == n && j == n)
	{
		return 0;
	}
}

int getnum(int* lockarr, int* unlockarr, const int n)
{
	return gnum(lockarr, unlockarr, n, 0, 0);
}

int main()
{
	int larr[] = { 1,30,32,100 };
	int uarr[] = { 10,50,53,80 };
	cout << getnum(larr, uarr, 4) << endl;
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享禁止Win10更新的两种方法

深恶痛绝 Windows更新简直就是毒瘤&#xff0c;总是在某些不需要的时候提示更新&#xff0c;而且关闭服务后总有办法重启。老是关不掉。 如果每次都是正常更新&#xff0c;好像也没啥所谓&#xff0c;但是总有那么一两次会蓝屏、黑屏、开不了机…… 52出品 下面是吾爱社区找…

贝锐蒲公英助力智慧楼宇,实现自控系统远程运维、数据实时监测

在智慧楼宇系统中&#xff0c;存在着多套不同的系统&#xff0c;比如&#xff1a;智能照明控制、智能空调控制、智能安防监控等。在实际应用中&#xff0c;除了需要打通楼内各个系统实现智能联动&#xff0c;如何实现各地多楼宇的数据实时互通构建智慧楼宇生态系统也是需要解决…

C#入门(1):程序结构、数据类型

一、C#程序结构 第一个C#程序 using System;namespace base_01 {class Program{#region 代码折叠块static void Main(string[] args){//控制台输出Console.WriteLine("Hello World!");Console.Write("C#是微软的编程语言"); //不换行输出//Console.Rea…

线性变换功能块S_RTI工程上的主要应用

西门子S_RTI模拟量转换功能块算法公式和代码介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Real IS…

辅助笔记-Jupyter Notebook的安装和使用

辅助笔记-Jupyter Notebook的安装和使用 文章目录 辅助笔记-Jupyter Notebook的安装和使用1. 安装Anaconda2. conda更换清华源3. Jupter Notebooks 使用技巧 笔记主要参考B站视频“最易上手的Python环境配置——Jupyter Notebook使用精讲”。 Jupyter Notebook (此前被称为IPyt…

mysql的行列互转

mysql的行列互转 多行转多列思路实现代码 多列转多行思路代码 多行转多列 多行转多列&#xff0c;就是数据库中存在的多条具有一定相同值的行数据&#xff0c;通过提取相同值在列头展示来实现行数据转为列数据&#xff0c;一般提取的值为枚举值。 思路 转换前表样式 -> 转…

(动手学习深度学习)第13章 计算机视觉---微调

文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 获取数据集 数据增强 定义和初始化模型 微调模型 训练模型

kaggle新赛:SenNet 3D肾脏分割大赛(3D语义分割)

赛题名称&#xff1a;SenNet HOA - Hacking the Human Vasculature in 3D 赛题链接&#xff1a;https://www.kaggle.com/competitions/blood-vessel-segmentation 赛题背景 目前&#xff0c;人类专家标注员需要手动追踪血管结构&#xff0c;这是一个缓慢的过程。即使有专家…

WSA子系统(一)

WSA子系统安装教程 Windows Subsystem for Android (WSA) 是微软推出的一项功能&#xff0c;它允许用户在 Windows 11 上运行 Android 应用程序。通过在 Windows 11 上引入 WSA&#xff0c;用户可以在其 PC 上轻松运行 Android 应用程序&#xff0c;从而扩展了用户的应用程序选…

Java内存结构

1.对象的结构 一个Java对象在内存中包括3个部分&#xff1a;对象头、实例数据和对齐填充 2.虚拟机存储数据的方式 2.1小端存储 : 便于数据之间的类型转换&#xff0c;例如:long类型转换为int类型时&#xff0c;高地址部分的数据可以直接截掉。 2.2大端存储 : 便于数据类型…

德迅云安全告诉您 网站被攻击怎么办-SCDN来帮您

随着互联网的发展给我们带来极大的便利&#xff0c;但是同时也带来一定的安全威胁&#xff0c;网络恶意攻击逐渐增多&#xff0c;很多网站饱受困扰&#xff0c;而其中最为常见的恶意攻击就是cc以及ddos攻击。针对网站攻击&#xff0c;今天为您介绍其中一种防护方式-SCDN&#x…

Zabbix实现故障自愈

一、简介 Zabbix agent 可以运行被动检查和主动检查。 在被动检查模式中 agent 应答数据请求。Zabbix server&#xff08;或 proxy&#xff09;询求数据&#xff0c;例如 CPU load&#xff0c;然后 Zabbix agent 返还结果。 主动检查处理过程将相对复杂。Agent 必须首先从 Z…

【算法每日一练]-分块(保姆级教程 篇1)POJ3648

插讲一下分块 题目&#xff1a;&#xff08;POJ 3648&#xff09; 一个简单的整数问题 前缀和往往用于静态的不会修改的区间和。遇到经常修改的区间问题&#xff0c;就要用分块或线段树来维护了。 分块算法是优化后的暴力&#xff0c;分块算法有时可以维护一些线段树维护不了的…

Michael Jordan最新报告:去中心化机器学习中的契约、不确定性和激励

‍ ‍导读 11月3日&#xff0c;智源研究院学术顾问委员会委员、机器学习泰斗Michael Jordan在以“新一代人工智能前沿”为主题的2023北京论坛 新工科专题论坛上&#xff0c;发表了题为Contracts, Uncertainty, and Incentives in Decentralized Machine Learning&#xff08;去…

RHCSA --- Linux存储管理

存储管理 Boot&#xff1a;可引导操作系统的分区&#xff08;必须是主分区&#xff09; 分区 ll /dev/nvme0n* 表示的是 nvme接口的磁盘 0n1 1 0n2 2 0n3 3 brw-rw----. 1 root disk 259, 0 Nov 15 19:31 /dev/nvme0n1 磁盘1 brw-rw----. 1 ro…

「Verilog学习笔记」根据状态转移图实现时序电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机&#xff1a;即输出不仅和当前状态有关&#xff0c;也和输入有关。 其中ST0&#xff0c;ST1&#xff0c;ST3的…

FastJson竟然会导致内存泄露?你遇到过吗?

FastJson是一款性能优异的java序列化和反序列框架&#xff0c;广泛应用于日常开发工作中&#xff0c;也许正是因为作者在设计这款框架时&#xff0c;比较注重性能方面的考量&#xff0c;在框架安全性&#xff0c;空间占用等方面做了一些牺牲。 很不幸小编前两天就遇到了一个使…

文件重命名最佳实践:如何确保文件名的准确性和一致性

在日常生活和工作中&#xff0c;经常需要处理大量的文件&#xff0c;包括电子文件和纸质文件。文件重命名是为了更好地组织和管理这些文件&#xff0c;以方便查找和使用。然而&#xff0c;重命名文件并不是一件简单的事情&#xff0c;它需要遵循一定的最佳实践以确保文件名的准…

视频封面:从视频中提取封面,轻松制作吸引人的视频

在当今的数字时代&#xff0c;视频已成为人们获取信息、娱乐和交流的重要方式。一个吸引人的视频封面往往能抓住眼球&#xff0c;提高点击率和观看率。今天将介绍如何从视频中提取封面&#xff0c;轻松制作吸引人的视频封面。 一、准备素材选择合适的视频片段 首先&#xff0…

母婴服务预约小程序的效果如何

二胎家庭增速明显&#xff0c;占比较大&#xff0c;成为市场各母婴品牌的目标&#xff0c;而随着行业发展及市场变化&#xff0c;线上互联网深入人们生活&#xff0c;各家母婴品牌开始向“数字化”靠拢。 目前母婴门店商家主要面临服务/产品线上曝光不足、宣传度不够或扩圈无门…