被锁总时间

 题目描述:

对一个事务进行加锁与解锁,其中有加锁数组,解锁数组,这两个数组长度相等,且数组内数据代表加锁与解锁的具体时间点,求给出数组中事务的总被锁时间。(其中加锁后默认在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;
}

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

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

相关文章

物联网AI MicroPython学习之语法 TIMER硬件定时器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; TIMER 介绍 模块功能: 硬件定时器模块 接口说明 Timer - 构建Timer对象 函数原型&#xff1a;Timer(id)参数说明&#xff1a; 参数类型必选参数&#xff1f;说明idintY硬件定时器外设模块id&#xff1a…

QT下使用QChart绘制曲线

目录 头文件内容构造函数AddSeries方法UpdateSeries方法AppendSeriesData方法SetLegendVisiableSetRubberBandCPP内容测试函数 需要用到的头文件&#xff1a; #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QValueAxis> #…

YARN,ZOOKEERPER--学习笔记

1&#xff0c;YARN组件 1.1YARN简介 YARN表示分布式资源调度&#xff0c;简单地说&#xff0c;就是&#xff1a;以分布式技术完成资源的合理分配&#xff0c;让MapReduce能高效完成计算任务。 YARN是Hadoop核心组件之一&#xff0c;用于提供分布式资源调度服务。 而在Hadoop …

拼图小游戏

运行出的游戏界面如下&#xff1a; User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password;public User() {}public User(String username, String password) {this.user…

Linux:安装软件的两种方式rpm和yum

一、rpm方式 1、简单介绍 RPM是RedHat Package Manager的缩写&#xff0c;它是Linux上打包和安装的工具。通过rpm打包的文件扩展名是.RPM。这个安装包就类似Windows系统中的.exe文件。rpm工具实现Linux上软件的离线安装。 2、软件相关信息的查询命令 查询Linux系统上所有已…

Ubuntu中apt-get update显示域名解析失败

第一步 检查主机->虚拟机能否ping成功 ping 红色框中的IPv4地址 能通&#xff0c;表示虚拟机ip配置成功;否则&#xff0c;需要先配置虚拟机ip 第二步 检查是否能ping成功百度网址 ping www.baidu.com 若不成功&#xff0c;可能原因 虚拟机没联网&#xff0c;打开火狐浏览器…

公司内部网络架设悟空CRM客户管理系统 cpolar无需公网IP实现内网,映射端口外网访问

1、什么是内网穿透&#xff1f; 内网穿透&#xff0c;即内网映射&#xff0c;内网IP端口映射到外网的过程。是一种主动的操作&#xff0c;需要本人一些内网的权限。比如在公司自己电脑&#xff0c;将办公OA发布到互联网&#xff0c;然后提供外网在家或出差在外连接访问。 可以…

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

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

【信息安全】浅谈三种XSS(跨站脚本攻击)的攻击流程与防御措施

银狼美图镇楼 XSS 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;是一种常见的Web安全漏洞&#xff0c;攻击者通过在Web应用中注入恶意脚本&#xff0c;使得浏览器在解析页面时执行该脚本&#xff0c;从而实现攻击目的。 类型 存储型XSS&…

LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)

622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 设计循环队列&#xff0c;我们可以从顺序结构和链式结构来考虑&#xff0c;但因为链式结构实现起来较为复杂&#xff0c;不易理解&#xff0c;且主流使用顺序存储&#xff0c;所以本文就是用顺序存储结构实现。 因为…

爱奇艺大数据离在线混部

混部作为一种提高资源利用率、降低成本的的方案&#xff0c;被业界普遍认可。爱奇艺在云原生化与降本增效的过程中&#xff0c;成功将大数据离线计算、音视频内容处理等工作负载与在线业务进行了混部&#xff0c;并且取得了阶段性收益。本文重点以大数据为例&#xff0c;介绍从…

【算法萌新闯力扣】:旋转字符串

力扣热题&#xff1a;796.旋转字符串 开篇 今天下午刷了6道力扣算法题&#xff0c;选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求&#xff0c;利用StringBuffer中的方法对字符串进行旋转&#xff0c;寻找相同的一项 …