Redian新闻
>
跟人聊了一道题,怎么做最优。
avatar
跟人聊了一道题,怎么做最优。# JobHunting - 待字闺中
y*6
1
就是一个大数组里面(unsorted) 要找sum of 最大的k 个数
int kSum (int [] array, int k);
不就是用heap (priorityQueue) keep the biggest k number 吗? 还能有什么更好的
方法吗? 面试的好像说有,但不说怎么办。
avatar
S*t
2
kth largest element can be found in O(n)
I think you can find it in algo textbook, or just google it

【在 y*******6 的大作中提到】
: 就是一个大数组里面(unsorted) 要找sum of 最大的k 个数
: int kSum (int [] array, int k);
: 不就是用heap (priorityQueue) keep the biggest k number 吗? 还能有什么更好的
: 方法吗? 面试的好像说有,但不说怎么办。

avatar
V*a
3
类似quick sort的算法,复杂度O(n),好像叫quick select来着,能找到最大的k个数。
avatar
y*a
4

median of medians.
The nth element of the array after you run the algorithm will be the nth
biggest element, and the right side will be of all bigger numbers bigger
than the nth.
The complexity of the algorithm is O(n).

【在 y*******6 的大作中提到】
: 就是一个大数组里面(unsorted) 要找sum of 最大的k 个数
: int kSum (int [] array, int k);
: 不就是用heap (priorityQueue) keep the biggest k number 吗? 还能有什么更好的
: 方法吗? 面试的好像说有,但不说怎么办。

avatar
w*e
5
已知完整数组的,直接一遍quickselect,然后再遍历一遍。平均O(n)
如果数据是stream进来的,不知道有多长,就维护一个2k长的vector,数据每填满2k个
就quickselect一遍,筛掉k个。最后平均也还是O(n)
avatar
x*1
6

不是很懂 stream进来的办法
你删掉了1k个 万一这1k个里面有的数是最后答案里面的呢 这个时候你又不知道最终
kth是多少

【在 w****e 的大作中提到】
: 已知完整数组的,直接一遍quickselect,然后再遍历一遍。平均O(n)
: 如果数据是stream进来的,不知道有多长,就维护一个2k长的vector,数据每填满2k个
: 就quickselect一遍,筛掉k个。最后平均也还是O(n)

avatar
w*e
7
我说的情况是事先知道k,但不知道总输入有多长。
这里的k是kth的k,不是一千。。

【在 x**1 的大作中提到】
:
: 不是很懂 stream进来的办法
: 你删掉了1k个 万一这1k个里面有的数是最后答案里面的呢 这个时候你又不知道最终
: kth是多少

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。