Redian新闻
>
请问485怎么diy,那里又模板?
avatar
请问485怎么diy,那里又模板?# EB23 - 劳工卡
g*j
1
Given two sorted integer arrays A and B of size n and m respectively, find
the kth smallest element in the union of A and B in O(lg(n)+lg(m)) time....
我解法如下
找到 A 的 中间值 a, O(1), 然后在B里面找到比它小的数的个数, O(lg(m)), 两个数组中小于等于a的数字的和为t,
如果t=k, 则返回a;
如果t>k, 则丢掉所有比a大的数, 在剩下的数中间找kth smallest的
如果t但是, 这个不是lg(n)+ lg(m)的吧?
avatar
N5
2
公司的hr和lawyer太慢了,像自己弄可以么?
需要公司出啥文件?
avatar
s*i
3
我来试一下
1. 先比较A[k/2]和B[k/2],设 A[k/2] <= B[k/2]。那么kth smallest一定在A[0..k]和
B[0..k/2]。
2. 然后比A[k/2]和B[k/4],如果A[k/2] <= B[k/4],同1,这时只用考虑A[0..k]和B[0
..k/4]
如果A[k/2]>B[k/4],那么kth smallest一定在A[k/2 .. k]和B[k/4 .. k/2]之间。因为
A[0..k/2]和B[0..k/4]一共只有3k/4个数
3. 按照1,2继续下去
最后应该就是O(log(n)+log(m))

数组中小于等于a的数字的和为t,

【在 g***j 的大作中提到】
: Given two sorted integer arrays A and B of size n and m respectively, find
: the kth smallest element in the union of A and B in O(lg(n)+lg(m)) time....
: 我解法如下
: 找到 A 的 中间值 a, O(1), 然后在B里面找到比它小的数的个数, O(lg(m)), 两个数组中小于等于a的数字的和为t,
: 如果t=k, 则返回a;
: 如果t>k, 则丢掉所有比a大的数, 在剩下的数中间找kth smallest的
: 如果t: 但是, 这个不是lg(n)+ lg(m)的吧?

avatar
t*r
5

]和
i think it should be inside a[k/2..k] b[0..k/2]
[0
因为
then i want to compare b[k/4] a[3k/4]
by this way,why the result is not log(k)

【在 s*****i 的大作中提到】
: 我来试一下
: 1. 先比较A[k/2]和B[k/2],设 A[k/2] <= B[k/2]。那么kth smallest一定在A[0..k]和
: B[0..k/2]。
: 2. 然后比A[k/2]和B[k/4],如果A[k/2] <= B[k/4],同1,这时只用考虑A[0..k]和B[0
: ..k/4]
: 如果A[k/2]>B[k/4],那么kth smallest一定在A[k/2 .. k]和B[k/4 .. k/2]之间。因为
: A[0..k/2]和B[0..k/4]一共只有3k/4个数
: 3. 按照1,2继续下去
: 最后应该就是O(log(n)+log(m))
:

avatar
s*i
7
考虑最坏情况

【在 t**r 的大作中提到】
:
: ]和
: i think it should be inside a[k/2..k] b[0..k/2]
: [0
: 因为
: then i want to compare b[k/4] a[3k/4]
: by this way,why the result is not log(k)

avatar
h*k
8

]和
这里可以再优化一下,如果A[k/2] <= B[k/2],kth smallest在A[k/2 ... k]和B[0..k
/2]。然后问题变成在A[k/2 ... k]和B[0..k/2]中找k/2 smallest。然后可以重复下去。
[0
因为

【在 s*****i 的大作中提到】
: 我来试一下
: 1. 先比较A[k/2]和B[k/2],设 A[k/2] <= B[k/2]。那么kth smallest一定在A[0..k]和
: B[0..k/2]。
: 2. 然后比A[k/2]和B[k/4],如果A[k/2] <= B[k/4],同1,这时只用考虑A[0..k]和B[0
: ..k/4]
: 如果A[k/2]>B[k/4],那么kth smallest一定在A[k/2 .. k]和B[k/4 .. k/2]之间。因为
: A[0..k/2]和B[0..k/4]一共只有3k/4个数
: 3. 按照1,2继续下去
: 最后应该就是O(log(n)+log(m))
:

avatar
l*a
9
一般说的复杂度都是平均情况吧?
你开始各取k/2
每次淘汰掉一半,
顶多logk次就剩一个元素比较了
我认为就可以有结果了。

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