描述
您获得了长度为n。
您的任务是使用从0到n -1的数字创建组,以确保在所有组中总共使用的每个数字i不超过usagelimits [i]次。您还必须满足以下条件:
- 每个组必须由不同的数字组成,这意味着在一个组中不允许重复数字。
- 每个组(第一个组除外)必须严格的长度大于以前的组。
返回一个整数,表示您可以在满足这些条件时可以创建的最大组数。
示例1:
Input: usageLimits = [1,2,5]
Output: 3
Explanation: In this example, we can use 0 at most once, 1 at most twice, and 2 at most five times.
One way of creating the maximum number of groups while satisfying the conditions is:
Group 1 contains the number [2].
Group 2 contains the numbers [1,2].
Group 3 contains the numbers [0,1,2].
It can be shown that the maximum number of groups is 3.
So, the output is 3.
示例2:
Input: usageLimits = [2,1,2]
Output: 2
Explanation: In this example, we can use 0 at most twice, 1 at most once, and 2 at most twice.
One way of creating the maximum number of groups while satisfying the conditions is:
Group 1 contains the number [0].
Group 2 contains the numbers [1,2].
It can be shown that the maximum number of groups is 2.
So, the output is 2.
示例3:
Input: usageLimits = [1,1]
Output: 1
Explanation: In this example, we can use both 0 and 1 at most once.
One way of creating the maximum number of groups while satisfying the conditions is:
Group 1 contains the number [0].
It can be shown that the maximum number of groups is 1.
So, the output is 1.
约束:
1 <= usagelimits.length <= 10^5
1 <= usagelimits [i] <= 10^9
方法
-
Sorting the usageLimits array
:第一步是按上升顺序对输入数组进行分类。排序需要o(nlogn)时间复杂性,其中n是usagelimits数组的长度。 -
Tracking the total and count
:总变量用于跟踪排序的usagelimits数组中元素的累积总和。计数变量表示迄今为止创建的组的数量以满足条件。 -
Iterating through the sorted array
:该函数使用用于循环的排序阵列迭代。对于索引I处的每个元素,它将值添加到总计中。总计的目的是跟踪到目前为止形成的所有组的允许发生的总数。 -
Checking the conditions
:在将元素添加到总数之后,该函数检查当前总值是否大于下一组所需的总和。下一组所需的总和是((count + 1) *(count + 2)) /2。在此处,count + 1表示下一个组的长度,(count + 2) / 2表示从0到计数到count + 1的元素总和。 -
Incrementing the count
:如果步骤4中的条件为真,则计数会增加,表明可以形成另一组。 -
Returning the result
:在整个排序的数组中迭代后,计数变量将代表在满足条件时可以创建的最大组数。该功能返回此计数。
复杂
时间复杂性:o(n logn)。
该解决方案的time complexity
主要由排序步骤(n logn)主导,其中n是输入阵列USAGELIMITS的长度。其余的操作涉及简单的算术和比较,这需要线性时间。因此,该函数的整体时间复杂性为O(nlogn)。
代码(Swift)
class Solution {
func maxIncreasingGroups(_ usageLimits: [Int]) -> Int {
var sortedLimits = usageLimits.sorted()
var total = 0
var count = 0
for i in 0..<sortedLimits.count {
total += sortedLimits[i]
if total >= ((count + 1) * (count + 2)) / 2 {
count += 1
}
}
return count
}
}
来源:Github
联系人
我明确专注于上市时间,而没有优先考虑技术债务。我参加了作为系统架构师的预售/RFX活动,用于移动的评估工作(iOS-SWIFT,ANDROID-KOTLIN),FRONTERD(REACT-TYPESCRIPT)和后端(nodejs-.net-php-php-kafka-kafka-sql-nosql)。我还通过知识转移到成功交付的知识转移,成立了预售作为CTO的工作。
ðLinkedIn:https://linkedin.com/in/sergeyleschev/
ðleetcode:https://leetcode.com/sergeyleschev/
ðTwitter:https://twitter.com/sergeyleschev
ðgithub:https://github.com/sergeyleschev
ð网站:https://sergeyleschev.github.io
ðreddit:https://reddit.com/user/sergeyleschev
ðQuora:https://quora.com/sergey-leschev
ð媒介:https://medium.com/@sergeyleschev
□PDF设计模式:Download