2809。最小的时间进行数组总和:使用动态编程的有效迅速解决方案,以最大程度地减少阵列A和B中的总和B。 em>
2813。 K-Length Subseq的最大优雅:Sergey的Swift代码优雅地选择了具有利润和类别的独特K-Length子序列。解决方案使用分类和迭代。时间:o(nlogn),空间:o(n)。
github:https://github.com/sergeyleschev/leetcode-swift
2809.最少有时间制作数组总和的时间x
描述
方法
我们首先将阵列A和B的总和分别计算为SA和SB。
如果没有采取任何措施,在i秒时,我们将拥有SB * i + sa。
在t秒内,我们选择t元素。当我们考虑这些选定的元素时,将删除[i]。这些选定元素的总和为b1 *(t -1) + b2 *(t -2) + ... + bt * 0,其中b1,b2,b3,...,bt以越来越多的顺序排列。
要解决这个问题,我们根据b [i]的值对所有对(b [i],a [i])进行排序。
然后,我们使用以下逻辑利用动态编程(DP):
DP [J] [i]代表使用J + 1个spemallest整数在I秒内可以降低的最大值。
DP方程如下:
dp [j] [i] = max(dp [j] [i],dp [j -1] [i -1] + i * b + a)
最后,如果sb * i + sa -dp [n -1] [i]小于或等于x,我们返回i秒的值。如果没有,我们返回-1。
只能通过仅存储DP数组的第一维来优化空间复杂性。
复杂
时间复杂性:O(n^2)
空间复杂性:O(n)
代码(Swift)
class Solution {
func minimumTime(_ nums1: [Int], _ nums2: [Int], _ x: Int) -> Int {
let n = nums1.count
var dp = [Int](repeating: 0, count: n + 1)
let sortedPairs = zip(nums2, nums1).sorted { $0.0 < $1.0 }
for (j, (b, a)) in sortedPairs.enumerated() {
for i in stride(from: j + 1, through: 1, by: -1) {
dp[i] = max(dp[i], dp[i - 1] + i * b + a)
}
}
let sa = nums1.reduce(0, +)
let sb = nums2.reduce(0, +)
for i in 0...n {
if sb * i + sa - dp[i] <= x {
return i
}
}
return -1
}
}
来源:Github
2813. K长度子序列的最大优雅
描述
直觉
该方法涉及根据“ Profurei”以降序排序“项目”阵列。通过选择第一个“ K”项目,我们确保我们获得最高的“ total_profit”。
方法
选择初始“ k”项目时,注意将其剩余的“ n -k”项目转向。添加这些项目的可行性取决于它们是否属于未探索的类别(尚未在“可见”集中)。
考虑到维持“ K”的子序列大小的限制,出现了一个关键的决定。为了优化优雅度量,当该物品与另一个类别共享其类别时,该算法从战略上取代了现有项目。
这个迭代的完善过程不断调整子序列,同时维护类别独特性的必要性。
该功能的最终输出封装了通过这种复杂的过程获得的优雅巅峰之作,这是总利润和类别奇点累积影响的结合。
复杂
时间复杂性:O(nlogn)
空间复杂性:O(n)
代码(Swift)
class Solution {
func findMaximumElegance(_ items: [[Int]], _ k: Int) -> Int {
var items = items.sorted(by: { $0[0] > $1[0] })
var res: Int64 = 0
var cur: Int64 = 0
var dup = [Int]()
var seen = Set<Int>()
for i in 0..<items.count {
if i < k {
if seen.contains(items[i][1]) {
dup.append(items[i][0])
}
cur += Int64(items[i][0])
} else if !seen.contains(items[i][1]) {
if dup.isEmpty {
break
}
cur += Int64(items[i][0] - dup.removeLast())
}
seen.insert(items[i][1])
res = max(res, cur + Int64(seen.count) * Int64(seen.count))
}
return Int(res)
}
}
来源:Github
联系人
我明确专注于上市时间,而没有优先考虑技术债务。我作为系统建筑师,移动(ios-swift,android-kotlin),前端(react-typescript)和后端(nodejs-.net-.net-php-php-php-php-kafka-sql)参加了系统架构师的预售/RFX活动。 -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