Redian新闻
>
zen me dou zai tao lun liu bei???
avatar
zen me dou zai tao lun liu bei???# Joke - 肚皮舞运动
I*A
1
You are given an array ' containing 0s and 1s. Find O(n) time and O(1) space
algorithm to find the maximum sub sequence which has equal number of 1s and
0s.
Examples
10101010
The longest sub sequence that satisfies the problem is the input itself
1101000
avatar
s*e
2
hen confused
avatar
g*y
3
我觉得这个题就是那个max length of subarray which sum to a
target value的变种。因为这个题array是binary的(意味着一段子数组的和的变化是“
连续”的),这个性质使得不需要经典题中用到的O(n)的hashtable
avatar
c*o
4
你要说啥?

【在 s*******e 的大作中提到】
: hen confused
avatar
i*r
5
Minus 0.5 for each elements in the array, then the problem is converted
to finding the maximum length sub-array whose sum is zero.
avatar
i*a
6
wo kenbeimibai ni zhashusumo. wu symo beidaichowen?
avatar
a*k
7
who has link to the problem "finding the maximum length sub-array whose sum
is a given value"?
avatar
I*g
8
关键是O(1)的space。
我知道有人做出了timeO(nlgn) space O(1)的算法
期待有人做出O(n)的
avatar
g*y
9
我不是都已经说了提示了吗

【在 I*********g 的大作中提到】
: 关键是O(1)的space。
: 我知道有人做出了timeO(nlgn) space O(1)的算法
: 期待有人做出O(n)的

avatar
i*r
10
Hmmm...
I was thinking the question was related to maxmium subarray problem or
subset sum problem. I was probably wrong.
The brutal force solution can achieve O(n^2) time complexity. To find an
O(n) solution, the problem need to be formulated as a recursion on a one-
dimensional subproblem space. I simply fail to see optimal substructures
among the prefix subproblems. Is it really possible to get an O(n) time
solution?


sum

【在 a**********k 的大作中提到】
: who has link to the problem "finding the maximum length sub-array whose sum
: is a given value"?

avatar
H*r
11
Count number of '1' and '0'
Reconstruct the sub-sequence from result above.

space
and

【在 I**A 的大作中提到】
: You are given an array ' containing 0s and 1s. Find O(n) time and O(1) space
: algorithm to find the maximum sub sequence which has equal number of 1s and
: 0s.
: Examples
: 10101010
: The longest sub sequence that satisfies the problem is the input itself
: 1101000

avatar
l*q
12
1。用本数组高位(除个位以外)做hash,放这个element之前的1的个数。比如如果
array[i]本来为1,array[0]到array[i-1]一共有5个1,则修改array[i]为51。这样空
间是O(1)的
2。其实对于定长的subarrays来说,如果满足1和0相等的条件,它们的1的数目必然是
相等的,也就是说它们的累积和都是相等的。所以这道题,就是在求累积和的最大差,
只不过加一个附加条件,那就是累积和必须为subarray长度的一半。这个最大差可以用
我们修改过的数组来求。类似于a0,a1,a2,...,an中求,max((aj-ai)),i(n)的,以前讨论过
avatar
g*y
13
严格意义上来说,你修改了原数组,即便最后还原,好像也不算是真正的O(1)空间算法
? => 如果数组是只读的呢?
其实我想的那个方法也是需要你这个trick才能O(1)空间,所以我就删掉了
avatar
s*s
14
我想到一个简单的贪心算法
两个指针从两边开始,如果整个数组1多,就从两端是1的一个移动。
例如:
101010101
开始指向第一个和最后一个1,结果发现数组多了一个1
结果两端都是1,随意反方向移动一个。
1000001
左边移动一个,右边移动一个。
avatar
s*s
15
算法似乎有问题,我有空再想想
avatar
l*t
16
大家看看是否正确
1.scan and count 0 and 1. 假定0多k个
2.find 0 from both ends. 去掉距离头或尾近的0,如果距离相同,任选一个。如果同
时去掉了1,k要增加。直到k=0.
ex.
110100001 k=1
->
1101000 k=1
->
110100
avatar
y*n
17
找到反例了
1010101111111010101

【在 l**********t 的大作中提到】
: 大家看看是否正确
: 1.scan and count 0 and 1. 假定0多k个
: 2.find 0 from both ends. 去掉距离头或尾近的0,如果距离相同,任选一个。如果同
: 时去掉了1,k要增加。直到k=0.
: ex.
: 110100001 k=1
: ->
: 1101000 k=1
: ->
: 110100

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