合并酒店价格

2024-06-20 09:18
文章标签 酒店 合并 价格

本文主要是介绍合并酒店价格,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

酒店房间的价格录入是通过时间段来录入的,比如10月1日至10月7日800元,10月8日至10月20日500元,请实现以下函数int[][] merge(int[][] dateRangePrices),输入是某个酒店多个日期段的价格,每个日期段(终止日期大于等于起始期)和对应的价格使用长度为3的数组来表示,比如[0, 19, 300], [10, 40, 250]分别表示从某天开始第1天到第20天价格都是300,第11天到第41天价格都是250,这些日期端有可能重复,重复的日期的价格以后面的为准, 请以以下规则合并并输出合并结果:
1.相邻两天的价格如果相同,那么这两个日期段应该合并
2.合并的结果应该以起始日期从小到大排序

例1:

# 输入
[0, 19, 300]
[30,40, 200]
[50,60, 100]# 输出
[0, 19, 300]
[30,40, 200]
[50,60, 100]

例2

# 输入
[0, 8, 300]
[3, 4, 200]
[6, 10, 100]# 输出
[0, 2, 300]
[3, 4, 200]
[5, 5, 300]
[6, 10, 100]

解决思路

把价格放入一维数组中,下标代表天数,下标所在值代表当天的价格;
最终结果为按天数的阶段输出。

代码

function merge($datePrice = [[]]) {//变成一维数组$price = [];$min = $max = 0;foreach ($datePrice as $item) {for ($i = $item[0], $min = min($min, $item[0]), $max = max($max, $item[1]) ; $i <= $item[1]; $i++) {$price[$i] = $item[2];}}//合并区间$res = [];$left = $min;while ($left <= $max) {if ( $price[$left] ) { //存在则定位出左右边界$right = $left; //存在左右边界都为同一天//注意右边界不可超过maxwhile ($right+1 <= $max && $price[$left] == $price[$right+1]) {$right++;}$res[] = [$left, $right, $price[$left]];$left = $right+1;} else { //不存在继续查找$left++;}}return $res;
}

算法复杂度

  • 时间复杂度 O(N)
  • 空间复杂度 O(N)

这篇关于合并酒店价格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077724

相关文章

JeecgBoot v3.7.0 all 版本发布,前后端合并一个仓库

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开

价格减免(Lc2288)——模拟

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。 例如 "$100"、"$23" 和 "$6" 表示价格,而 "100"、"$" 和 "$1e5 不是。 给你一个字符串 sentence 表示一个句子和一个整数 discount 。对于每个表示价格的单

Python批量读取csv文件并合并文件

import pandas as pdimport os # 获取当前路径cwd = os.getcwd()# 要拼接的文件夹及其完整路径,注不要包含中文## 待读取批量csv的文件夹 read_path = 'data_Q1_2018' ## 待保存的合并后的csv的文件夹 save_path = 'data_Q1_2018_merge' ## 待保存

合并有序链表

合并有序链表 图解代码如下 图解 虽然很复杂,但能够很好的理解怎么使用链表,以及对链表的指针类理解 代码如下 Node* merge_list_two_pointer(List& list1, List& list2){Node* new_head1 = list1.head;Node* new_head2 = list2.head;Node* sentinel1 =

技巧:合并多个RAR分卷压缩

因为文件压缩之后体积仍然过大,大家可能会选择进行分卷压缩,那么rar分卷压缩包之后如何合并成一个压缩包文件呢?今天我们来学习rar分卷压缩包,合并成一个的方法。 最基础的方法就是将分卷压缩包解压出来之后,再将文件进行合并,这个方法就不再赘述,下面是更方便的操作方法。 这个方法利用我之前分享过的压缩包格式转换功能,我们打开WinRAR,找到功能栏中【工具】-【转换压缩文件格式】 在转换压缩

Studying-代码随想录训练营day17| 654.最大二叉树、617合并二叉树、700.二叉搜索树中的搜索、98.验证二叉树搜索树

第十七天,二叉树part05,进一步学习二叉树💪 654.最大二叉树 文档讲解:代码随想录最大二叉树 视频讲解:手撕最大二叉树 题目: 学习:本题与利用中序和后序序列构造二叉树有相同之处。依据题目要求,首先在数组里面找到最大值,作为根节点,然后划分左右区间对应根节点的左右子树。再分别在左右区间中找到最大值,作为根节点(中间节点),之后再次划分区间,进行下一轮循环。 代码:

【位操作笔记】位合并 通过掩码

位合并(Merge bits) 通过掩码 通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。 算法说明 该算法使用了异或来实现,比普通的实现方式节省一次操作。 实现代码 non_masked_val和masked_val是两个要进行合并的数,mask是掩码。 non_masked_val

【位操作笔记】位合并 普通方式

位合并(Merge bits) 普通方式 通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。 算法说明 该算法通过先与掩码,再进行或操作完成。 实现代码 non_masked_val和masked_val是两个要进行合并的数,mask是掩码。 non_masked_val是合并非掩码位,

农产品价格信息系统小程序

一键掌握市场脉动 🌾 引言:为何关注农产品价格? 在当今社会,农产品价格的波动直接关系到农民的收入和消费者的生活成本。因此,及时、准确地掌握农产品价格信息,对于农民合理安排生产、消费者做出购买决策都具有重要意义。农产品价格信息系统小程序应运而生,为我们提供了一个便捷、高效的获取价格信息的途径。 📲 小程序功能介绍 1. 实时更新 农产品价格信息系统小程序能够实时更新各类农产品的价格

[CSU - 1811 (湖南省赛16)] Tree Intersection (启发式合并)

CSU - 1811 (湖南省赛16) 给定一棵树,每个节点都有一个颜色 问割掉任意一条边,生成的两个子树中颜色集合的交集大小 问题可以转化为任意一棵子树中, 这个子树中的颜色数量和只在这个子树中出现的颜色的数量 用总的颜色数量减去独有颜色数量即为这棵子树的答案 从 lcy大爷那里学到了机智的启发式合并的做法 对每个点维护一个 map 来记录这个点为根的子树中颜色的及其数