w****m 发帖数: 235 | 1 new graduate Software engineer
是用google doc交流的,题目和代码都直接在上面写。
1.求一个数字数组里的最大连续数字的个数。
3, 4, 4, 4, 2, 2, 3, 4 => return 3
2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。
“abc”, “ab” => print “2”
“abc”, “b” => print “0 2”
“abc”, “ac” => print “1”
“aab”, “ab” => print “0” OR print “1”
3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
个,求每次窗口中的最大值。
3, 4, 5, 7, 3, 5, 2, 9
k = 3
print “5 7 7 7 5 9”
看起来都是些很平常的问题,除了第3题可以稍用点小技巧,不知道还暗藏了什么玄机
吗?
为什么G家phone interview要两个人面?明天还有一个,不知道和这个是不是类似风格
的。 |
q***y 发帖数: 236 | 2 遇上这样的题目真是轻松愉快啊。
3要O(n)算法。 |
t********3 发帖数: 567 | 3 第三题不是leetcode上面的某个题么
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
j********e 发帖数: 1192 | 4 第3题应该就是考O(N)算法,应该没有其他玄机吧。
new graduate Software engineer
是用google doc交流的,题目和代码都直接在上面写。
1.求一个数字数组里的最大连续数字的个数。
3, 4, 4, 4, 2, 2, 3, 4 => return 3
2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。
“abc”, “ab” => print “2”
“abc”, “b” => print “0 2”
“abc”, “ac” => print “1”
“aab”, “ab” => print “0” OR print “1”
3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
个,求每次窗口中的最大值。
3, 4, 5, 7, 3, 5, 2, 9
k = 3
print “5 7 7 7 5 9”
看起来都是些很平常的问题,除了第3题可以稍用点小技巧,不知道还暗藏了什么玄机
吗?
为什么G家phone interview要两个人面?明天还有一个,不知道和这个是不是类似风格
的。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
d******a 发帖数: 238 | |
w****x 发帖数: 2483 | 6 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
倒是店面给3题有点多 |
c*******r 发帖数: 610 | |
p*****2 发帖数: 21240 | 8
这题好像没练过。先说说我的想法再去看leetcode。
用一个queue,第一个数总保持最大的值。
每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
数,push进去。
如果当前的数大于尾巴, 把尾巴干掉。
【在 d******a 的大作中提到】 : 大家说说第三道题的O(n)解法吧?
|
a***o 发帖数: 1182 | 9 2爷太牛比了!
【在 p*****2 的大作中提到】 : : 这题好像没练过。先说说我的想法再去看leetcode。 : 用一个queue,第一个数总保持最大的值。 : 每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的 : 数,push进去。 : 如果当前的数大于尾巴, 把尾巴干掉。
|
p*****2 发帖数: 21240 | 10 刚练了一个
from collections import deque
def Max(arr, k):
l=[]
dq=deque()
for i in xrange(len(arr)):
if len(dq) and dq[0]<=i-k:
dq.popleft()
while len(dq) and arr[dq[-1]]
dq.pop()
dq.append(i)
if i>=k-1:
l.append(arr[dq[0]])
return l
arr=[3, 4, 5, 7, 3, 5, 2, 9 ]
k=3
print Max(arr,k) |
|
|
p*****2 发帖数: 21240 | 11 第一题
def Max(l):
dp=[1]*len(l)
for i in xrange(1,len(l)):
if l[i]==l[i-1]+1:
dp[i]=dp[i-1]+1
return max(dp)
l=[3, 4, 4, 4, 2, 2, 3, 4]
print Max(l)
O(1) space的
def Max(l):
m=1
c=1
for i in xrange(1,len(l)):
if l[i]==l[i-1]+1:
c+=1
m=max(m,c)
else:
c=1
return m |
c*******r 发帖数: 610 | 12 二爷真执着,见题必练~佩服
【在 p*****2 的大作中提到】 : 刚练了一个 : from collections import deque : def Max(arr, k): : l=[] : dq=deque() : : for i in xrange(len(arr)): : if len(dq) and dq[0]<=i-k: : dq.popleft() :
|
p*****2 发帖数: 21240 | 13 第二题
def missing(s1,s2):
l1=list(s1)
l2=list(s2)
j=0
print "----------------------"
for i in xrange(len(l1)):
if j==len(l2) or l1[i]!=l2[j]:
print i
else:
j+=1
missing("abc","ab")
missing("abc","b")
missing("abc","ac")
missing("aab","ab") |
p*****2 发帖数: 21240 | 14
昨天等了一晚上,没人上题。今天有机会得赶紧练练。
【在 c*******r 的大作中提到】 : 二爷真执着,见题必练~佩服
|
P*A 发帖数: 189 | 15 楼主跟我当初电面题目一模一样阿,
我估计面试官都一样。
看来他挺懒的,这么久了还不换题目
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p***c 发帖数: 2 | 16 第2题谁能解释一下,thx.
若“aab”, “ab” => print “0” AND print “1”?
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p*****2 发帖数: 21240 | 17
是or 不是 and
【在 p***c 的大作中提到】 : 第2题谁能解释一下,thx. : 若“aab”, “ab” => print “0” AND print “1”? : : 置。
|
h****e 发帖数: 928 | 18 同佩服。
【在 p*****2 的大作中提到】 : : 是or 不是 and
|
q****x 发帖数: 7404 | 19 三道有点多。1/2和3难度差很多。
第二题就是2匹配1吧。O(n+m)。
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p*****2 发帖数: 21240 | 20
膜拜Googler大牛
【在 h****e 的大作中提到】 : 同佩服。
|
|
|
x*******6 发帖数: 262 | 21 最后一个missing(‘aab’,‘ab’)没有print出 0 的那种情况啊
【在 p*****2 的大作中提到】 : 第二题 : def missing(s1,s2): : l1=list(s1) : l2=list(s2) : : j=0 : print "----------------------" : for i in xrange(len(l1)): : if j==len(l2) or l1[i]!=l2[j]: : print i
|
x*******6 发帖数: 262 | 22 原来只是要print任意一种情况。。。擦, 想了一晚上 |
p*****2 发帖数: 21240 | 23
牛。
【在 x*******6 的大作中提到】 : 原来只是要print任意一种情况。。。擦, 想了一晚上
|
s***0 发帖数: 117 | 24 2) is O(N), any time you see this kind of string question the answer is
always hash table... |
w****m 发帖数: 235 | 25
哈哈是吗,那你的另一个面试官问了什么问题呀?
【在 P*A 的大作中提到】 : 楼主跟我当初电面题目一模一样阿, : 我估计面试官都一样。 : 看来他挺懒的,这么久了还不换题目 : : 置。
|
w****m 发帖数: 235 | 26
第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
推。
但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
,就要对这个k大小的窗口重新寻找最大值。
这个的最坏是O(N*k)的复杂度吧。
【在 w****x 的大作中提到】 : 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。 : 倒是店面给3题有点多
|
i*********7 发帖数: 348 | 27 果断拜见大牛。。。话说啥时候在Q上,有事情想问一下捏。
【在 p*****2 的大作中提到】 : : 牛。
|
p*****2 发帖数: 21240 | 28
复杂度高了。看我的code吧。
【在 w****m 的大作中提到】 : : 第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的 : 比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值 : ,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类 : 推。 : 但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了 : ,就要对这个k大小的窗口重新寻找最大值。 : 这个的最坏是O(N*k)的复杂度吧。
|
w****x 发帖数: 2483 | 29
滔滔江水啊~~~
【在 p*****2 的大作中提到】 : 第一题 : def Max(l): : dp=[1]*len(l) : for i in xrange(1,len(l)): : if l[i]==l[i-1]+1: : dp[i]=dp[i-1]+1 : : return max(dp) : l=[3, 4, 4, 4, 2, 2, 3, 4] : print Max(l)
|
x*******6 发帖数: 262 | 30
我自己做的也是peking2一样的算法,遍历str1给str2一个pointer然后比较字符。
用hashtable的话请问如何处理重复字符问题?还有字符的顺序问题但这个应该可以用
sortedmap解决。小弟刚练算法经常问弱问题请莫见怪。。
【在 s***0 的大作中提到】 : 2) is O(N), any time you see this kind of string question the answer is : always hash table...
|
|
|
E*******0 发帖数: 465 | 31 1st
int GetMaxContiniousNum(int* arr, int num)
{
if(!arr)
return 0;
if (num<=0)
return 0;
int duplicatedNum=*arr;
int duplicatedCount=1;
int rst=duplicatedCount;
for (int i=1; i
{
if (*(arr+i)==duplicatedNum)
++duplicatedCount;
else
{
duplicatedNum=*(arr+i);
duplicatedCount=1;
}
if (duplicatedCount>rst)
rst=duplicatedCount;
}
return rst;
} |
B*******1 发帖数: 2454 | 32 My code for this one:
int getMax(int a[], int size)
{
if (size == 0) return 0;
int pre = a[0], maxCount = 0, count = 1;
for (int i = 0; i < size; ) {
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
if (i == size) break;
count = 1;
pre = a[i];
}
return maxCount;
}
【在 E*******0 的大作中提到】 : 1st : int GetMaxContiniousNum(int* arr, int num) : { : if(!arr) : return 0; : if (num<=0) : return 0; : int duplicatedNum=*arr; : int duplicatedCount=1; : int rst=duplicatedCount;
|
E*******0 发帖数: 465 | 33 vector* GetAbsentPositions(string s1, string s2)
{
vector* rst=new vector();
int i=0,j=0;
while (j
while (i
if (s1[i]!=s2[j])
{
(*rst).push_back(i);
++i;
}
else
{
++j;
++i;
break;
}
while (i
(*rst).push_back(i++);
return rst;
} |
E*******0 发帖数: 465 | 34 个人认为if (i==size) break; 不需要。
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
E*******0 发帖数: 465 | 35 3rd
I am thinking that maybe we can use heap to implement it. |
E*******0 发帖数: 465 | |
B*******1 发帖数: 2454 | 37 没有的话下面这句会越界
pre = a[i];
【在 E*******0 的大作中提到】 : 个人认为if (i==size) break; 不需要。
|
E*******0 发帖数: 465 | 38 for (int i = 0; i < size; ) {
count = 1;
pre = a[i];
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
}
这样写会不会清楚些?感觉刚才那样写有点乱。
不过题目比较简单,无所谓了。我刚才只是提出我的个人意见而已。 |
B*******1 发帖数: 2454 | 39 是的,刚才写太快了,这样子更加简洁了。
【在 E*******0 的大作中提到】 : for (int i = 0; i < size; ) { : count = 1; : pre = a[i]; : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount) : maxCount = count; : } : 这样写会不会清楚些?感觉刚才那样写有点乱。
|
E*******0 发帖数: 465 | 40 void GetMaxValueOfWindow(int* arr, int num,int k, list& rst)
{
rst.clear();
if (!arr || 0==num || num
return;
for (int i=0;i<=num-k;i++)
{
priority_queue window(arr+i,arr+k+i);
rst.push_back(window.top());
}
return;
} |
|
|
E*******0 发帖数: 465 | 41 3rd
Get max value in the window by priority queue.
So the computation complexity is O(n*k). We assume that k is constant. So
complexity is O(n). |
E*******0 发帖数: 465 | 42 感觉会有问题。你这个queue应该是heap吧。
如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个
不在当前window里面的数当做最大的数。
7 5 6 4 3 2 1
【在 p*****2 的大作中提到】 : : 复杂度高了。看我的code吧。
|
p*****2 发帖数: 21240 | 43
你这个是求最大重复的吧?
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
l*******s 发帖数: 1258 | 44 第二题感觉应该有shortest edit distance
稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
应该是O(m*n) |
b***e 发帖数: 1419 | 45 Q3 can have a O(n) solution. As far as the time complexity is concern, this
question is equivalent to a special case where n = 2 * k, where k is the
window size. For this special case, we can
* Divide the array to 4 equal length parts, p1, p2, p3 and p4, each of which
has the length k/2.
* For p2 and p3, find the max value in them, say, v2, and v3.
* Without losing generality, we can assume v2 <= v3. Then we can scan to the
right in one linear pass to cover the windows that start from within p2.
This solves half of the problem, and remaining part is p1.
* Apply the same approach on p1, p2, which is half size of the original
problem.
This will give a complexity n * (1 + 1/2 + 1/4 + ...) = O(2n).
【在 d******a 的大作中提到】 : 大家说说第三道题的O(n)解法吧?
|
g*****e 发帖数: 282 | 46 我还联想到*a*b?c的情况,缺的相当于通配符
【在 l*******s 的大作中提到】 : 第二题感觉应该有shortest edit distance : 稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了, : 应该是O(m*n)
|
p**********e 发帖数: 316 | 47 keep the window sort, the complexity is nlgk,
How O(n) is achieved using a queue?
【在 E*******0 的大作中提到】 : 感觉会有问题。你这个queue应该是heap吧。 : 如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个 : 不在当前window里面的数当做最大的数。 : 7 5 6 4 3 2 1
|
C***U 发帖数: 2406 | 48 这个题就是min-stack的变形吧
那个题目要你insert pop min都是O(1)空间
这个题目就是max-queue 然后要insert pop max都是O(1)空间
做法就可以类似min-stack那个题目了
【在 p*****2 的大作中提到】 : : 你这个是求最大重复的吧?
|
j********g 发帖数: 244 | 49 这题这么写行么,
("abc","tc")
好像就会输成 0 1 2啊
是不是还是得上hash table
【在 E*******0 的大作中提到】 : vector* GetAbsentPositions(string s1, string s2) : { : vector* rst=new vector(); : int i=0,j=0; : while (j: while (i: if (s1[i]!=s2[j]) : { : (*rst).push_back(i); : ++i;
|
h****n 发帖数: 2094 | 50 1. 扫一遍就可以了。
2. 扫一遍也可以了。
3. 可以优化。不用keep K个element
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
|
|
A*********n 发帖数: 158 | 51 第三题是leetcode上的那道滑动窗口题目,用deque来做
http://www.leetcode.com/2011/01/sliding-window-maximum.html
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
l****1 发帖数: 19 | 52 上一个自己写的第三题的Java实现。请求大神门指教。。
顺便为明天G电面intern攒点人品。。
import java.util.*;
public class MaxWindow{
public LinkedList findMax(int[] in, int k){
ArrayDeque deque=new ArrayDeque();
LinkedList result=new LinkedList();
for(int i=0;i
if(!deque.isEmpty() && deque.getFirst().index<=i-k)
deque.pollFirst();
while(!deque.isEmpty() && deque.getLast().value
])
deque.pollLast();
deque.addLast(new Pair(in[i],i));
if(i>=k-1)
result.add(deque.getFirst().value);
}
return result;
}
}
class Pair{
int value;
int index;
public Pair(int v,int i){
this.value=v;
this.index=i;
}
} |
w***o 发帖数: 109 | 53 第三题
思路跟二爷的差不多,只不过用数组实现,便于用binary search。他那个是insertion
sort,我的是binary search,稍快一点。
int[] B = {3,4,5,7,3,5,2,9};
int k = 3;
int[] C = new int[B.length];
int l = 0, r = 1;
for(int i = 1; i < B.length; i++) {
int b = B[i];
int ll = l;
while(ll < r) {
int mid = (ll + r) / 2;
if(B[C[mid]] > b)
ll = mid + 1;
else
r = mid;
}
C[r++] = i;
if(i >= k - 1) {
if(i - k >= C[l])
l++;
System.out.println(" " + B[C[l]]);
}
} |
e***s 发帖数: 799 | 54 我觉得 ("abc","tc") 就是invalid input了,因为题目说了 第二字符串是第一字符串
的子集
【在 j********g 的大作中提到】 : 这题这么写行么, : ("abc","tc") : 好像就会输成 0 1 2啊 : 是不是还是得上hash table
|
e***s 发帖数: 799 | 55 二爷威武! 但是Double Queue C#没有啊,怎么办?
【在 p*****2 的大作中提到】 : 刚练了一个 : from collections import deque : def Max(arr, k): : l=[] : dq=deque() : : for i in xrange(len(arr)): : if len(dq) and dq[0]<=i-k: : dq.popleft() :
|
m*****k 发帖数: 731 | 56 for (int i = 0; i < size; ) {
: while (++i < size && a[i] == pre) {
why not
for (int i = 1; i < size; i++ ) {
: while ( a[i] == pre) {
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
|
|
f**********n 发帖数: 258 | |
h*****f 发帖数: 248 | 62 Hmm...the runtime complexity of your algo is > O(n) I think.
You have n elements and a window of k.
Hence, you will have to create at least n-k priority_queues, and each
priority_queue takes O(k) to create.
When k = n, it takes O(n).
When k = n/2, it takes (n^2) as (n-k)*k=(n-n/2)(n/2) = n^2/4.
【在 E*******0 的大作中提到】 : 3rd : Get max value in the window by priority queue. : So the computation complexity is O(n*k). We assume that k is constant. So : complexity is O(n).
|
w****m 发帖数: 235 | 63 new graduate Software engineer
是用google doc交流的,题目和代码都直接在上面写。
1.求一个数字数组里的最大连续数字的个数。
3, 4, 4, 4, 2, 2, 3, 4 => return 3
2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。
“abc”, “ab” => print “2”
“abc”, “b” => print “0 2”
“abc”, “ac” => print “1”
“aab”, “ab” => print “0” OR print “1”
3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
个,求每次窗口中的最大值。
3, 4, 5, 7, 3, 5, 2, 9
k = 3
print “5 7 7 7 5 9”
看起来都是些很平常的问题,除了第3题可以稍用点小技巧,不知道还暗藏了什么玄机
吗?
为什么G家phone interview要两个人面?明天还有一个,不知道和这个是不是类似风格
的。 |
q***y 发帖数: 236 | 64 遇上这样的题目真是轻松愉快啊。
3要O(n)算法。 |
t********3 发帖数: 567 | 65 第三题不是leetcode上面的某个题么
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
j********e 发帖数: 1192 | 66 第3题应该就是考O(N)算法,应该没有其他玄机吧。
new graduate Software engineer
是用google doc交流的,题目和代码都直接在上面写。
1.求一个数字数组里的最大连续数字的个数。
3, 4, 4, 4, 2, 2, 3, 4 => return 3
2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。
“abc”, “ab” => print “2”
“abc”, “b” => print “0 2”
“abc”, “ac” => print “1”
“aab”, “ab” => print “0” OR print “1”
3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
个,求每次窗口中的最大值。
3, 4, 5, 7, 3, 5, 2, 9
k = 3
print “5 7 7 7 5 9”
看起来都是些很平常的问题,除了第3题可以稍用点小技巧,不知道还暗藏了什么玄机
吗?
为什么G家phone interview要两个人面?明天还有一个,不知道和这个是不是类似风格
的。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
d******a 发帖数: 238 | |
w****x 发帖数: 2483 | 68 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
倒是店面给3题有点多 |
c*******r 发帖数: 610 | |
p*****2 发帖数: 21240 | 70
这题好像没练过。先说说我的想法再去看leetcode。
用一个queue,第一个数总保持最大的值。
每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
数,push进去。
如果当前的数大于尾巴, 把尾巴干掉。
【在 d******a 的大作中提到】 : 大家说说第三道题的O(n)解法吧?
|
|
|
a***o 发帖数: 1182 | 71 2爷太牛比了!
【在 p*****2 的大作中提到】 : : 这题好像没练过。先说说我的想法再去看leetcode。 : 用一个queue,第一个数总保持最大的值。 : 每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的 : 数,push进去。 : 如果当前的数大于尾巴, 把尾巴干掉。
|
p*****2 发帖数: 21240 | 72 刚练了一个
from collections import deque
def Max(arr, k):
l=[]
dq=deque()
for i in xrange(len(arr)):
if len(dq) and dq[0]<=i-k:
dq.popleft()
while len(dq) and arr[dq[-1]]
dq.pop()
dq.append(i)
if i>=k-1:
l.append(arr[dq[0]])
return l
arr=[3, 4, 5, 7, 3, 5, 2, 9 ]
k=3
print Max(arr,k) |
p*****2 发帖数: 21240 | 73 第一题
def Max(l):
dp=[1]*len(l)
for i in xrange(1,len(l)):
if l[i]==l[i-1]+1:
dp[i]=dp[i-1]+1
return max(dp)
l=[3, 4, 4, 4, 2, 2, 3, 4]
print Max(l)
O(1) space的
def Max(l):
m=1
c=1
for i in xrange(1,len(l)):
if l[i]==l[i-1]+1:
c+=1
m=max(m,c)
else:
c=1
return m |
c*******r 发帖数: 610 | 74 二爷真执着,见题必练~佩服
【在 p*****2 的大作中提到】 : 刚练了一个 : from collections import deque : def Max(arr, k): : l=[] : dq=deque() : : for i in xrange(len(arr)): : if len(dq) and dq[0]<=i-k: : dq.popleft() :
|
p*****2 发帖数: 21240 | 75 第二题
def missing(s1,s2):
l1=list(s1)
l2=list(s2)
j=0
print "----------------------"
for i in xrange(len(l1)):
if j==len(l2) or l1[i]!=l2[j]:
print i
else:
j+=1
missing("abc","ab")
missing("abc","b")
missing("abc","ac")
missing("aab","ab") |
p*****2 发帖数: 21240 | 76
昨天等了一晚上,没人上题。今天有机会得赶紧练练。
【在 c*******r 的大作中提到】 : 二爷真执着,见题必练~佩服
|
P*A 发帖数: 189 | 77 楼主跟我当初电面题目一模一样阿,
我估计面试官都一样。
看来他挺懒的,这么久了还不换题目
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p***c 发帖数: 2 | 78 第2题谁能解释一下,thx.
若“aab”, “ab” => print “0” AND print “1”?
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p*****2 发帖数: 21240 | 79
是or 不是 and
【在 p***c 的大作中提到】 : 第2题谁能解释一下,thx. : 若“aab”, “ab” => print “0” AND print “1”? : : 置。
|
h****e 发帖数: 928 | 80 同佩服。
【在 p*****2 的大作中提到】 : : 是or 不是 and
|
|
|
q****x 发帖数: 7404 | 81 三道有点多。1/2和3难度差很多。
第二题就是2匹配1吧。O(n+m)。
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
p*****2 发帖数: 21240 | 82
膜拜Googler大牛
【在 h****e 的大作中提到】 : 同佩服。
|
x*******6 发帖数: 262 | 83 最后一个missing(‘aab’,‘ab’)没有print出 0 的那种情况啊
【在 p*****2 的大作中提到】 : 第二题 : def missing(s1,s2): : l1=list(s1) : l2=list(s2) : : j=0 : print "----------------------" : for i in xrange(len(l1)): : if j==len(l2) or l1[i]!=l2[j]: : print i
|
x*******6 发帖数: 262 | 84 原来只是要print任意一种情况。。。擦, 想了一晚上 |
p*****2 发帖数: 21240 | 85
牛。
【在 x*******6 的大作中提到】 : 原来只是要print任意一种情况。。。擦, 想了一晚上
|
s***0 发帖数: 117 | 86 2) is O(N), any time you see this kind of string question the answer is
always hash table... |
w****m 发帖数: 235 | 87
哈哈是吗,那你的另一个面试官问了什么问题呀?
【在 P*A 的大作中提到】 : 楼主跟我当初电面题目一模一样阿, : 我估计面试官都一样。 : 看来他挺懒的,这么久了还不换题目 : : 置。
|
w****m 发帖数: 235 | 88
第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
推。
但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
,就要对这个k大小的窗口重新寻找最大值。
这个的最坏是O(N*k)的复杂度吧。
【在 w****x 的大作中提到】 : 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。 : 倒是店面给3题有点多
|
i*********7 发帖数: 348 | 89 果断拜见大牛。。。话说啥时候在Q上,有事情想问一下捏。
【在 p*****2 的大作中提到】 : : 牛。
|
p*****2 发帖数: 21240 | 90
复杂度高了。看我的code吧。
【在 w****m 的大作中提到】 : : 第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的 : 比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值 : ,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类 : 推。 : 但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了 : ,就要对这个k大小的窗口重新寻找最大值。 : 这个的最坏是O(N*k)的复杂度吧。
|
|
|
w****x 发帖数: 2483 | 91
滔滔江水啊~~~
【在 p*****2 的大作中提到】 : 第一题 : def Max(l): : dp=[1]*len(l) : for i in xrange(1,len(l)): : if l[i]==l[i-1]+1: : dp[i]=dp[i-1]+1 : : return max(dp) : l=[3, 4, 4, 4, 2, 2, 3, 4] : print Max(l)
|
x*******6 发帖数: 262 | 92
我自己做的也是peking2一样的算法,遍历str1给str2一个pointer然后比较字符。
用hashtable的话请问如何处理重复字符问题?还有字符的顺序问题但这个应该可以用
sortedmap解决。小弟刚练算法经常问弱问题请莫见怪。。
【在 s***0 的大作中提到】 : 2) is O(N), any time you see this kind of string question the answer is : always hash table...
|
E*******0 发帖数: 465 | 93 1st
int GetMaxContiniousNum(int* arr, int num)
{
if(!arr)
return 0;
if (num<=0)
return 0;
int duplicatedNum=*arr;
int duplicatedCount=1;
int rst=duplicatedCount;
for (int i=1; i
{
if (*(arr+i)==duplicatedNum)
++duplicatedCount;
else
{
duplicatedNum=*(arr+i);
duplicatedCount=1;
}
if (duplicatedCount>rst)
rst=duplicatedCount;
}
return rst;
} |
B*******1 发帖数: 2454 | 94 My code for this one:
int getMax(int a[], int size)
{
if (size == 0) return 0;
int pre = a[0], maxCount = 0, count = 1;
for (int i = 0; i < size; ) {
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
if (i == size) break;
count = 1;
pre = a[i];
}
return maxCount;
}
【在 E*******0 的大作中提到】 : 1st : int GetMaxContiniousNum(int* arr, int num) : { : if(!arr) : return 0; : if (num<=0) : return 0; : int duplicatedNum=*arr; : int duplicatedCount=1; : int rst=duplicatedCount;
|
E*******0 发帖数: 465 | 95 vector* GetAbsentPositions(string s1, string s2)
{
vector* rst=new vector();
int i=0,j=0;
while (j
while (i
if (s1[i]!=s2[j])
{
(*rst).push_back(i);
++i;
}
else
{
++j;
++i;
break;
}
while (i
(*rst).push_back(i++);
return rst;
} |
E*******0 发帖数: 465 | 96 个人认为if (i==size) break; 不需要。
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
E*******0 发帖数: 465 | 97 3rd
I am thinking that maybe we can use heap to implement it. |
E*******0 发帖数: 465 | |
B*******1 发帖数: 2454 | 99 没有的话下面这句会越界
pre = a[i];
【在 E*******0 的大作中提到】 : 个人认为if (i==size) break; 不需要。
|
E*******0 发帖数: 465 | 100 for (int i = 0; i < size; ) {
count = 1;
pre = a[i];
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
}
这样写会不会清楚些?感觉刚才那样写有点乱。
不过题目比较简单,无所谓了。我刚才只是提出我的个人意见而已。 |
|
|
B*******1 发帖数: 2454 | 101 是的,刚才写太快了,这样子更加简洁了。
【在 E*******0 的大作中提到】 : for (int i = 0; i < size; ) { : count = 1; : pre = a[i]; : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount) : maxCount = count; : } : 这样写会不会清楚些?感觉刚才那样写有点乱。
|
E*******0 发帖数: 465 | 102 void GetMaxValueOfWindow(int* arr, int num,int k, list& rst)
{
rst.clear();
if (!arr || 0==num || num
return;
for (int i=0;i<=num-k;i++)
{
priority_queue window(arr+i,arr+k+i);
rst.push_back(window.top());
}
return;
} |
E*******0 发帖数: 465 | 103 3rd
Get max value in the window by priority queue.
So the computation complexity is O(n*k). We assume that k is constant. So
complexity is O(n). |
E*******0 发帖数: 465 | 104 感觉会有问题。你这个queue应该是heap吧。
如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个
不在当前window里面的数当做最大的数。
7 5 6 4 3 2 1
【在 p*****2 的大作中提到】 : : 复杂度高了。看我的code吧。
|
p*****2 发帖数: 21240 | 105
你这个是求最大重复的吧?
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
l*******s 发帖数: 1258 | 106 第二题感觉应该有shortest edit distance
稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
应该是O(m*n) |
b***e 发帖数: 1419 | 107 Q3 can have a O(n) solution. As far as the time complexity is concern, this
question is equivalent to a special case where n = 2 * k, where k is the
window size. For this special case, we can
* Divide the array to 4 equal length parts, p1, p2, p3 and p4, each of which
has the length k/2.
* For p2 and p3, find the max value in them, say, v2, and v3.
* Without losing generality, we can assume v2 <= v3. Then we can scan to the
right in one linear pass to cover the windows that start from within p2.
This solves half of the problem, and remaining part is p1.
* Apply the same approach on p1, p2, which is half size of the original
problem.
This will give a complexity n * (1 + 1/2 + 1/4 + ...) = O(2n).
【在 d******a 的大作中提到】 : 大家说说第三道题的O(n)解法吧?
|
g*****e 发帖数: 282 | 108 我还联想到*a*b?c的情况,缺的相当于通配符
【在 l*******s 的大作中提到】 : 第二题感觉应该有shortest edit distance : 稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了, : 应该是O(m*n)
|
p**********e 发帖数: 316 | 109 keep the window sort, the complexity is nlgk,
How O(n) is achieved using a queue?
【在 E*******0 的大作中提到】 : 感觉会有问题。你这个queue应该是heap吧。 : 如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个 : 不在当前window里面的数当做最大的数。 : 7 5 6 4 3 2 1
|
C***U 发帖数: 2406 | 110 这个题就是min-stack的变形吧
那个题目要你insert pop min都是O(1)空间
这个题目就是max-queue 然后要insert pop max都是O(1)空间
做法就可以类似min-stack那个题目了
【在 p*****2 的大作中提到】 : : 你这个是求最大重复的吧?
|
|
|
j********g 发帖数: 244 | 111 这题这么写行么,
("abc","tc")
好像就会输成 0 1 2啊
是不是还是得上hash table
【在 E*******0 的大作中提到】 : vector* GetAbsentPositions(string s1, string s2) : { : vector* rst=new vector(); : int i=0,j=0; : while (j: while (i: if (s1[i]!=s2[j]) : { : (*rst).push_back(i); : ++i;
|
h****n 发帖数: 2094 | 112 1. 扫一遍就可以了。
2. 扫一遍也可以了。
3. 可以优化。不用keep K个element
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
A*********n 发帖数: 158 | 113 第三题是leetcode上的那道滑动窗口题目,用deque来做
http://www.leetcode.com/2011/01/sliding-window-maximum.html
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
l****1 发帖数: 19 | 114 上一个自己写的第三题的Java实现。请求大神门指教。。
顺便为明天G电面intern攒点人品。。
import java.util.*;
public class MaxWindow{
public LinkedList findMax(int[] in, int k){
ArrayDeque deque=new ArrayDeque();
LinkedList result=new LinkedList();
for(int i=0;i
if(!deque.isEmpty() && deque.getFirst().index<=i-k)
deque.pollFirst();
while(!deque.isEmpty() && deque.getLast().value
])
deque.pollLast();
deque.addLast(new Pair(in[i],i));
if(i>=k-1)
result.add(deque.getFirst().value);
}
return result;
}
}
class Pair{
int value;
int index;
public Pair(int v,int i){
this.value=v;
this.index=i;
}
} |
w***o 发帖数: 109 | 115 第三题
思路跟二爷的差不多,只不过用数组实现,便于用binary search。他那个是insertion
sort,我的是binary search,稍快一点。
int[] B = {3,4,5,7,3,5,2,9};
int k = 3;
int[] C = new int[B.length];
int l = 0, r = 1;
for(int i = 1; i < B.length; i++) {
int b = B[i];
int ll = l;
while(ll < r) {
int mid = (ll + r) / 2;
if(B[C[mid]] > b)
ll = mid + 1;
else
r = mid;
}
C[r++] = i;
if(i >= k - 1) {
if(i - k >= C[l])
l++;
System.out.println(" " + B[C[l]]);
}
} |
e***s 发帖数: 799 | 116 我觉得 ("abc","tc") 就是invalid input了,因为题目说了 第二字符串是第一字符串
的子集
【在 j********g 的大作中提到】 : 这题这么写行么, : ("abc","tc") : 好像就会输成 0 1 2啊 : 是不是还是得上hash table
|
e***s 发帖数: 799 | 117 二爷威武! 但是Double Queue C#没有啊,怎么办?
【在 p*****2 的大作中提到】 : 刚练了一个 : from collections import deque : def Max(arr, k): : l=[] : dq=deque() : : for i in xrange(len(arr)): : if len(dq) and dq[0]<=i-k: : dq.popleft() :
|
m*****k 发帖数: 731 | 118 for (int i = 0; i < size; ) {
: while (++i < size && a[i] == pre) {
why not
for (int i = 1; i < size; i++ ) {
: while ( a[i] == pre) {
【在 B*******1 的大作中提到】 : My code for this one: : int getMax(int a[], int size) : { : if (size == 0) return 0; : int pre = a[0], maxCount = 0, count = 1; : for (int i = 0; i < size; ) { : while (++i < size && a[i] == pre) { : count ++; : } : if (count > maxCount)
|
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
|
|
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
f**********n 发帖数: 258 | |
h*****f 发帖数: 248 | 124 Hmm...the runtime complexity of your algo is > O(n) I think.
You have n elements and a window of k.
Hence, you will have to create at least n-k priority_queues, and each
priority_queue takes O(k) to create.
When k = n, it takes O(n).
When k = n/2, it takes (n^2) as (n-k)*k=(n-n/2)(n/2) = n^2/4.
【在 E*******0 的大作中提到】 : 3rd : Get max value in the window by priority queue. : So the computation complexity is O(n*k). We assume that k is constant. So : complexity is O(n).
|
b*******s 发帖数: 5216 | 125 O(n)也不难
【在 q***y 的大作中提到】 : 遇上这样的题目真是轻松愉快啊。 : 3要O(n)算法。
|
q****m 发帖数: 177 | 126 对于第二道题,
"ab", "ba", 这个怎么搞? 顺序matter吗?
对于第三道题, 只想到用 heap, 那么就是 n log k.
置。
【在 w****m 的大作中提到】 : new graduate Software engineer : 是用google doc交流的,题目和代码都直接在上面写。 : 1.求一个数字数组里的最大连续数字的个数。 : 3, 4, 4, 4, 2, 2, 3, 4 => return 3 : 2.两个字符串,第二个字符串是第一个的缺了几个,打印第二个字符串缺了的字符位置。 : “abc”, “ab” => print “2” : “abc”, “b” => print “0 2” : “abc”, “ac” => print “1” : “aab”, “ab” => print “0” OR print “1” : 3. 一个数字数组,给一个window,长度k,window从数组头开始往后滑动,每次滑动一
|
a********3 发帖数: 228 | 127 第一题题意有点歧义,如果输入数组是{4, 5, 4, 4, 2, 2, 3, 3, 3},输出是1还是3
? |