2 solutions
-
0
题面描述
塔子哥正在研究虚拟化内存,并希望实现一个地址范围为32G的内存机制,支持数据的读写和清空操作。输入包括多个指令,格式为“Command Address Length Data”,其中Command可以是Read、Write或Clear,Address是64位无符号十六进制数,Length是64位无符号十进制数,Data是以字节流形式表示的十六进制数据。输出只针对Read指令,返回相应地址的数据,若参数不合法则不输出。示例输入包括Write、Read和Clear指令,程序需要根据指令处理内存数据,并确保符合题目要求。
思路:哈希表模拟
观察数据规模,存储的数据量不超过16MB,即为,因此可以使用哈希表来存储
- 执行
Clear
操作时,清空哈希表即可 - 执行
Write
操作时,按位置写入每个字节 - 执行
Read
操作时,首先需要判断哈希表中是否存在,如果不存在,使用00
代替,
每次执行
Write
和Read
操作时,都需要判断输入的长度是否在合法范围,的合法范围为代码流程说明
-
输入处理:使用
input().split(",")
读取输入并将字符串转换为整数列表,表示每本书的满意值。 -
排序:对书籍的满意值进行升序排序,以便优先阅读满意值低的书籍,最大化最终的快乐值。
-
计算初始快乐值:
- 使用一个循环遍历所有书籍,计算当所有书籍都被阅读时的总快乐值,并存储在变量
ret
中。这里使用了(i + 1)
来表示书籍的阅读顺序对快乐值的影响。
- 使用一个循环遍历所有书籍,计算当所有书籍都被阅读时的总快乐值,并存储在变量
-
尝试舍弃书籍:
- 使用一个循环,依次舍弃最前面的书籍。
- 在每次舍弃书籍后,计算剩余书籍的快乐值并更新
ret
,确保其保持为最大值。
-
输出结果:最后,打印出计算得到的最大快乐值。
代码的优化建议
- 避免频繁的
pop(0)
操作:pop(0)
会导致列表的元素重排,时间复杂度为 O(n),可以考虑使用索引来处理已舍弃的书籍,避免每次都修改列表。 - 更简洁的计算:可以通过累计的方式来更新快乐值,而不是每次重新计算,可以提高效率。
时间复杂度
代码
C++
python代码
Java代码
- 执行
- 1
Information
- ID
- 65
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 135
- Accepted
- 24
- Uploaded By