由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - finding the majority element in an array?
相关主题
The time complexity on finding the kth largest element in aHashMap, HashTable and Array 有啥区别
问题变形面试问题
GOOGLE 电面面经来做一个暴力题
Given an array of N integers from range [0, N] and one is missing. Find the missing number.向各位大侠请教几道面试题的思路
Find the Kth smallest element in 2 sortedsorted arry, 找最长重复subarray
求教一个onsite面试题目一道老题目
一道算法题目请教一道题目
Extension problem of finding intersection of two sorted array一个算法题:Selecting median of three sorted arrays
相关话题的讨论汇总
话题: majority话题: array话题: element话题: bit话题: finding
进入JobHunting版参与讨论
1 (共1页)
p*****i
发帖数: 197
1
问一道题目,how to find the majority element in an array?
例如 一个array里有 4,2,3,1,2,2,2 就要return 2(因为2出现的次数是4, 4超过了
array 长度的一半)。相反,如果array 里是4,2,3,1,2,2,3 就要return -1(因为没
有数超过array 长度的一半)。
如何在 O(n) 的time complexity 和O(1) 的space里完成?
c*****e
发帖数: 737
2
荷兰国旗问题听说过么,这个应该差不多
c*****e
发帖数: 737
p*****i
发帖数: 197
4
荷兰国旗问题没听说过,能说下吗?

【在 c*****e 的大作中提到】
: 荷兰国旗问题听说过么,这个应该差不多
p*****i
发帖数: 197
5
谢啦,很好的解释

【在 c*****e 的大作中提到】
: http://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html
c*****e
发帖数: 737
6
就是1/3的问题

【在 p*****i 的大作中提到】
: 荷兰国旗问题没听说过,能说下吗?
p*****i
发帖数: 197
7
能具体点儿吗? 先膜拜下

【在 c*****e 的大作中提到】
: 就是1/3的问题
c*****e
发帖数: 737
8
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Flag/

【在 p*****i 的大作中提到】
: 能具体点儿吗? 先膜拜下
p*****i
发帖数: 197
9
hah,感谢啦

【在 c*****e 的大作中提到】
: http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Flag/
i**********e
发帖数: 1145
10
这题还有另一个解法,是用bit manipulation来做,当然没有那个之前发的链接优。如果是个数组里所有是32bit integer,循环三十二次,每一次只看第 k 个 significant bit,看 majority 的是 1 或者 0 bit。假设majority存在的话,那么 majority element 的第 k 个 bit 必定就是这个majority bit,以此类推。
这个问题也可以扩展成数组里有个数出现超过 1/k 次,找出那个 majority。方法类似。
相关主题
求教一个onsite面试题目HashMap, HashTable and Array 有啥区别
一道算法题目变形面试问题
Extension problem of finding intersection of two sorted array来做一个暴力题
进入JobHunting版参与讨论
p*****i
发帖数: 197
11
强大,学习了

如果是个数组里所有是32bit integer,循环三十二次,每一次只看第 k 个
significant bit,看 majority 的是 1 或者 0 bit。假设majority存在的话,那么
majority element 的第 k 个 bit 必定就是这个majority bit,以此类推。
似。

【在 i**********e 的大作中提到】
: 这题还有另一个解法,是用bit manipulation来做,当然没有那个之前发的链接优。如果是个数组里所有是32bit integer,循环三十二次,每一次只看第 k 个 significant bit,看 majority 的是 1 或者 0 bit。假设majority存在的话,那么 majority element 的第 k 个 bit 必定就是这个majority bit,以此类推。
: 这个问题也可以扩展成数组里有个数出现超过 1/k 次,找出那个 majority。方法类似。

j****b
发帖数: 108
12
http://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html
这个解法真的对么?
要是ABCDEFFF的情况用这个解法得出来的结果是F,但实际应该是不存在啊
s******t
发帖数: 139
13

这个好像描述得不对呀, 如果是
CACACACAB 最后就是B 1
但是B肯定不是majority呀?

【在 c*****e 的大作中提到】
: http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Flag/
s******t
发帖数: 139
14

握爪,我们想到一起去了。

【在 j****b 的大作中提到】
: http://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html
: 这个解法真的对么?
: 要是ABCDEFFF的情况用这个解法得出来的结果是F,但实际应该是不存在啊

s******t
发帖数: 139
15
想明白了, 最后还必须再用最后的元素go through一遍整个array去确定是不是
majority. 这个最后元素不一定是整个array出现次数最多的元素。
r*****n
发帖数: 1285
16
那样还是不行。拿他们自己的例子,取前面一部分,AAACCBB就不行。

【在 s******t 的大作中提到】
: 想明白了, 最后还必须再用最后的元素go through一遍整个array去确定是不是
: majority. 这个最后元素不一定是整个array出现次数最多的元素。

p**********u
发帖数: 157
17
稍微修改一下
这样,用两个指针遍历整个数组的同时删除其中的元素,保证每次删除的时候都删掉两个不一样的元素,这样等没有元素可
删的时候,剩下的就是答案了
K*****u
发帖数: 241
18
现在看去思路很简单,当时居然是发了篇paper
s******t
发帖数: 139
19

所以我说最后还要go through 整个array一遍去确认最后一个元素是不是majority,如
果不是就说明没有majority, 这个最后元素并不一定是在array里出现次数最多的元素。

【在 r*****n 的大作中提到】
: 那样还是不行。拿他们自己的例子,取前面一部分,AAACCBB就不行。
K*****u
发帖数: 241
20
和那个宴会名人题不是有异曲同工之处?

素。

【在 s******t 的大作中提到】
:
: 所以我说最后还要go through 整个array一遍去确认最后一个元素是不是majority,如
: 果不是就说明没有majority, 这个最后元素并不一定是在array里出现次数最多的元素。

相关主题
向各位大侠请教几道面试题的思路请教一道题目
sorted arry, 找最长重复subarray一个算法题:Selecting median of three sorted arrays
一道老题目一个data structure design的问题,求助
进入JobHunting版参与讨论
p*i
发帖数: 411
21
'majority' means (strictly) more than 50%
There is no majority element in AAACCBB.

【在 r*****n 的大作中提到】
: 那样还是不行。拿他们自己的例子,取前面一部分,AAACCBB就不行。
a*****n
发帖数: 158
22
这个算法的前提是必须有MAJORITY,如果没有,这个算法是不能用的。。。。所以它不
能解决第2种CASE。。。
w****o
发帖数: 2260
23
ihasleetcode,
你的bit manipulation方法对于有majority (超过1/2)的很好理解,也很简洁。
可是你说了可以扩展成超过 1/k次,这个比较难理解。比如说k=4, 有可能在数组中有
多个超过1/4次的数,这个怎么弄?
即使只有一个数超过了1/4次,用bit manipulation也没有方法找出来呀?!
谢谢!

如果是个数组里所有是32bit integer,循环三十二次,每一次只看第 k 个
significant bit,看 majority 的是 1 或者 0 bit。假设majority存在的话,那么
majority element 的第 k 个 bit 必定就是这个majority bit,以此类推。
似。

【在 i**********e 的大作中提到】
: 这题还有另一个解法,是用bit manipulation来做,当然没有那个之前发的链接优。如果是个数组里所有是32bit integer,循环三十二次,每一次只看第 k 个 significant bit,看 majority 的是 1 或者 0 bit。假设majority存在的话,那么 majority element 的第 k 个 bit 必定就是这个majority bit,以此类推。
: 这个问题也可以扩展成数组里有个数出现超过 1/k 次,找出那个 majority。方法类似。

f*******n
发帖数: 12623
24
可以。snapshot 已经说了,只需要完成之后check一下答案是不是majority。
你的意思是这个算法如果有majority肯定找到,但是如果没有majority可能找到没有,
也可能找到一个随机的错的元素。对不对?
但是这样的话,只需要check一下那个答案是不是majority。这个只需要O(n) time, O(
1) space,没有改变算法的complexity

【在 a*****n 的大作中提到】
: 这个算法的前提是必须有MAJORITY,如果没有,这个算法是不能用的。。。。所以它不
: 能解决第2种CASE。。。

1 (共1页)
进入JobHunting版参与讨论
相关主题
一个算法题:Selecting median of three sorted arraysFind the Kth smallest element in 2 sorted
一个data structure design的问题,求助求教一个onsite面试题目
一道google题一道算法题目
Amazon电面(经),也求个祝福。。Extension problem of finding intersection of two sorted array
The time complexity on finding the kth largest element in aHashMap, HashTable and Array 有啥区别
问题变形面试问题
GOOGLE 电面面经来做一个暴力题
Given an array of N integers from range [0, N] and one is missing. Find the missing number.向各位大侠请教几道面试题的思路
相关话题的讨论汇总
话题: majority话题: array话题: element话题: bit话题: finding