- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
上次我发现了一个有趣的问题,然后就卡住了。
给定 n 个数字 a[1], ..., a[n] 按升序和数字 k (1 <= n,k <= 10^5)。
假设我们正在按总和对给定序列的每个可能子集进行排序。
我们必须找到第 k 个这样的子集的总和。
例如:
n = 4, k = 8
a = { 2, 7, 8, 15 }
1: { 2 }, 总和 = 2
2: { 7 }, 总和 = 7
3: { 8 }, 总和 = 8
4: { 2, 7 }, 总和 = 9
5: { 2, 8 }, 总和 = 10
6: { 7, 8 }, 总和 = 15
7: { 15 }, 总和 = 15
8: { 2, 15 }, 总和 = 17
...
k = 8,所以答案 = 17(子集 {2,15})。
当然,我们可以生成每个可能的子集,整个解决方案的运行时间为 O(2^n * n),但我正在寻找更智能的东西 - 线性,或至少为 O(nk)。
最佳答案
(为简单起见,将假设非空子集。处理空子集是一两行。)
给定索引 S
的非空子集,将 S
的 children 定义为 S\{max(S)} U {max(S) + 1}
和 S U {max(S) + 1}
。从 {1}
开始,子关系形成一棵树,其中包括正整数的每个非空子集。
{1}
| \
{2} {1,2}______
| \ \ \
{3} {2,3} {1,3} {1,2,3}
以相应数组元素的总和为键,这棵树是一个最小堆。如果您仔细计算 key (通过加减法而不是从头开始求和)并延迟执行最小堆删除,那么您会得到一个 O(k log k) 时间算法。
关于algorithm - 找到每个可能子集的第 k 个最小总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33219712/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!