由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道面试题的优化
相关主题
求问两题思路一道面试题:数组 in-place shuffle
变形面试问题问一道google面试题(from careercup)
T家一面那道经典的求和问题
请教个题目,求最长subarry, average < k一个算法题目
考古到一道题google面试题,算烂题么?
一道面试题:matrix找第k大菜鸟向大家请教个面试题
自己设计的一道面试题求问Jane Street一道面试题
问两道amazon的面试题bloomberg电面结束,送上面经,求祝福
相关话题的讨论汇总
话题: sum话题: 数组话题: nlgn话题: 个数话题: 前缀
进入JobHunting版参与讨论
1 (共1页)
s********0
发帖数: 34
1
一个数组只有1,0 元素,找出所有连续区间的数目, 满足该区间1的个数>=0的数目。
比如a:[1, 0, 1, 0, 0, 1]
结果为11: (3+4+1+2+1)
[1], [1], [1], =>3
[1, 0], [0, 1], [1, 0], [0, 1], =>4
[1, 0, 1], =>1
[1, 0, 1, 0], [1, 0, 0, 1], =>2
[1, 0, 1, 0, 0, 1] => 1
要求复杂度 nlgn.
O(n^2)的复杂度比较容易想,0置换成-1,然后求前缀和数组sum。
nlgn我是这么想的:
还是0换成-1,还是求前缀数组,然后对每个sum[i]求 前面小于等于它的个数,这步可
以二分。
比如某一步的时候 sum = 0 有1个, sum = 1 有2个, sum =2 有3个,
则sum <= 0: 1个, sum <= 1: 3个, sum <= 2: 6个 这个是单调递增的
维护这个单调队列 可以用树状数组
觉得实现起来有点麻烦,请教有别的方法没?thanks
U***A
发帖数: 849
2
Dp?
s********0
发帖数: 34
3
应该是dp 只是没想好怎么dp -______-
l*********8
发帖数: 4642
4
为什么[0,1,0], [1,0,0], [0,0,1], [0,1,0,0], [1,0,1,0,0], [0, 1, 0, 0, 1]不满
足条件?
如果满足条件的话,应该有17个区间。 而且O(n)时间可以求解。

【在 s********0 的大作中提到】
: 一个数组只有1,0 元素,找出所有连续区间的数目, 满足该区间1的个数>=0的数目。
: 比如a:[1, 0, 1, 0, 0, 1]
: 结果为11: (3+4+1+2+1)
: [1], [1], [1], =>3
: [1, 0], [0, 1], [1, 0], [0, 1], =>4
: [1, 0, 1], =>1
: [1, 0, 1, 0], [1, 0, 0, 1], =>2
: [1, 0, 1, 0, 0, 1] => 1
: 要求复杂度 nlgn.
: O(n^2)的复杂度比较容易想,0置换成-1,然后求前缀和数组sum。

s********0
发帖数: 34
5
不好意思 可能没描述清楚
[0,1,0] 有1个‘1’, 2个‘0’, 所以1的个数小于0的个数 不成立
所以题目通俗点讲 就是
如果是1, -1 (0替换成-1)组成的数组的话,就是找出所有子数组的个数,要求子数
组和>= 0
m*****n
发帖数: 2152
6
据我所知,DP算法好像还没有能突破n^2的。
你可以试试Binary indexed tree。

【在 s********0 的大作中提到】
: 应该是dp 只是没想好怎么dp -______-
f******t
发帖数: 18
7
難道不是逆序對(這裡是順序)數目麼?對sum數組用歸並排序吧?
l*********8
发帖数: 4642
8
谢谢解释。
我觉得还是可以用O(n)时间求解。

【在 s********0 的大作中提到】
: 不好意思 可能没描述清楚
: [0,1,0] 有1个‘1’, 2个‘0’, 所以1的个数小于0的个数 不成立
: 所以题目通俗点讲 就是
: 如果是1, -1 (0替换成-1)组成的数组的话,就是找出所有子数组的个数,要求子数
: 组和>= 0

s********0
发帖数: 34
9
赞 转化成这个就可以了 nlgn归并就可以

【在 f******t 的大作中提到】
: 難道不是逆序對(這裡是順序)數目麼?對sum數組用歸並排序吧?
l*********8
发帖数: 4642
10
nice!

【在 s********0 的大作中提到】
: 赞 转化成这个就可以了 nlgn归并就可以
m****c
发帖数: 252
11
有点不太明白,这个前缀和数组sum怎么求啊。

【在 s********0 的大作中提到】
: 一个数组只有1,0 元素,找出所有连续区间的数目, 满足该区间1的个数>=0的数目。
: 比如a:[1, 0, 1, 0, 0, 1]
: 结果为11: (3+4+1+2+1)
: [1], [1], [1], =>3
: [1, 0], [0, 1], [1, 0], [0, 1], =>4
: [1, 0, 1], =>1
: [1, 0, 1, 0], [1, 0, 0, 1], =>2
: [1, 0, 1, 0, 0, 1] => 1
: 要求复杂度 nlgn.
: O(n^2)的复杂度比较容易想,0置换成-1,然后求前缀和数组sum。

1 (共1页)
进入JobHunting版参与讨论
相关主题
bloomberg电面结束,送上面经,求祝福考古到一道题
问一个时间复杂度的问题,数组里取k个最大数一道面试题:matrix找第k大
FaceBook面经--第一部分自己设计的一道面试题
一道算法题问两道amazon的面试题
求问两题思路一道面试题:数组 in-place shuffle
变形面试问题问一道google面试题(from careercup)
T家一面那道经典的求和问题
请教个题目,求最长subarry, average < k一个算法题目
相关话题的讨论汇总
话题: sum话题: 数组话题: nlgn话题: 个数话题: 前缀