分配最少页数2025年3月17日 | 阅读 3 分钟 问题陈述您被给出大小为 N 的整数数组,其中表示 N 本书的页数。您还被给出一个整数 M,表示学生人数。您必须以某种方式将这 N 本书分配给 M 个学生阅读,以便每个学生都必须阅读一本书,并且所有书籍都应该被阅读。一个学生也可以阅读多本书,但书籍必须是连续的。书籍的顺序将按照页数升序排列。 您的任务是以某种方式将书籍分配给学生,使得分配给一名学生的页数最多应该尽可能少。 例如 令 N=5 且 M=3 Pages[] = { 120,132,165,324,987} 在上面的示例中,我们可以有以下可能性 情况 1情况 3情况 3情况 4情况 5在这里,我们将使用二分查找来解决此问题。 这个问题有很多边界情况,例如
因此,我们知道,我们在有答案范围的地方应用二分查找。 在这个问题中,最小答案将是数组中的最大值,最大答案将是数组的总和。 Java 代码输出 ![]() 说明 在上面的代码中,我们实现了最小页数分配的二分查找解决方案。我们有包含五个值的页面数组,并且 m 等于 2。 对于二分查找,left = 987 且 right = sum (page) = 1728 mid= 987+(1728-987)/2 = 1357 现在,对于 mid 值,我们将检查是否可以以某种方式分配页面,使得分配给学生的页数最多小于 mid。 因此,我们将得到 true,现在我们的 left=987,right 将是 mid-1,即 1356。 现在 mid= 987+(1356-987)/2 = 1171 所以现在,对于 mid 值 1171,我们将从函数中得到 true,并将向左搜索空间移动。所以 right 现在将是 1170。 Mid = 987+(1170-987)/2 = 1078 所以现在对于 mid 值,我们将得到 true,我们将向左移动,所以 right=1077 Mid=987+(1077-987)/2 = 1032 所以我们将为 1032 得到 true,所以我们将再次向左,所以 right = 1031 Mid= 987+(1031-987)/2 = 1009 所以我们将再次得到 true,现在 right = 1008 而 mid= 987+(1008-987)/2 = 997 并且函数将返回 true 以 997,所以 right 将是 996。 Mid = 987+(996-987)/2 = 991 而且这也是 true,所以 right = 990 现在 mid = 987+(990-987)/2=988 再次,true,所以 right = 987 现在 mid =987,我们将得到 true,所以 right=986 但 left 987,所以循环将终止,mid =987 将保持为答案。 时间复杂度:O(logN),其中 N 代表书中页的总数。 空间复杂度:O(1) 下一主题装配线调度 |
链表是许多算法和应用程序中常用的数据结构。与静态数组不同,它们允许高效地插入和删除元素。然而,与常规数组相比,高效地对链表进行排序会带来独特的挑战。快速排序是数组最流行的排序算法之一……
7 分钟阅读
引言 数组旋转是在计算机科学中一项基本的操作,经常用于不同的算法和应用程序。它包括将数组的组件一致地向左或向右移动特定数量的位置。虽然有很多方法可以处理……
阅读 4 分钟
堆是基于树的数据结构,通常用于实现优先队列。它们允许高效地访问最大或最小的元素。有时,我们必须将两个堆合并成一个包含来自两个堆的所有元素的合并堆。这允许实现具有...的优先队列
7 分钟阅读
引言:丑陋数:数据结构与算法 (DSA) 中的概念,这是一项关于多种通用技术(广泛用于算法设计和动态规划)的有趣描述。一个未求解的数字被描述为一个有效的整数,如果其顶点元素仅为两个、三个或五个。一个难看的...
阅读9分钟
简介:在编程世界中,数据结构在高效地组织和管理数据方面起着至关重要的作用。ArrayList 和 LinkedList 是许多编程语言中最常用的数据结构之一。这两种数据结构服务于类似的目的,但它们在...方面存在显著差异。
7 分钟阅读
?在本文中,我们将详细了解稀疏矩阵及其类型。什么是稀疏矩阵?工程、科学、计算和经济等现实生活应用中的各种数值问题都会使用大型矩阵。这些矩阵通常包含许多零元素,并且...
7 分钟阅读
引言 链表是计算机科学中用于存储和管理数据元素集合的基本数据结构。它们有多种形式,包括单向链表、双向链表和循环链表。一种有趣的变体是 Y 形链表,它呈现出独特的...
阅读 8 分钟
本文将解释约瑟夫问题的概念;介绍如何使用 C 语言的循环链表来解决它,并详细解释代码。引言 约瑟夫问题是一个著名的理论问题,自...以来一直存在。
5 分钟阅读
引言:在计算机科学中,链表是用于表示数据元素集合的基本数据结构。虽然它们经常超越简单的线性模式,但它们可以是单向连接的或双向连接的。扁平化链表是一个特别有趣的变体。我们将探讨...
阅读 4 分钟
在本教程中,我们将探讨如何在 O(1) 时间内连接两个链表。链表到底是什么?链表是一种线性数据结构,其中成员不必存储在连续的内存位置中。链表的元素通过...连接
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India