Redian新闻
>
"do not provide work sponsorship" 与 485 pending EAD的关系?
avatar
"do not provide work sponsorship" 与 485 pending EAD的关系?# EB23 - 劳工卡
w*m
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要两个人面?明天还有一个,不知道和这个是不是类似风格
的。
avatar
p*n
2
多谢了
avatar
c*7
3
请问180天后换类似工作, 如果公司说不提供sponsorship,485 pending EAD算是需要
sponsorship还是不要?
avatar
q*y
4
遇上这样的题目真是轻松愉快啊。
3要O(n)算法。
avatar
l*e
5
店里应该可以,我也还有一张没买,不过我觉得不值得跑一趟了。
除非你那的Lowes很近。

【在 p*****n 的大作中提到】
: 多谢了
avatar
C*e
6
真是奇怪 你已经自己有了EAD employment authorization 为什么还要面试东家
provide you sponsorship呢
very confusing about what hell r u thinking ? 大概又是一个名校毕业的吧

【在 c*******7 的大作中提到】
: 请问180天后换类似工作, 如果公司说不提供sponsorship,485 pending EAD算是需要
: sponsorship还是不要?

avatar
t*3
7
第三题不是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从数组头开始往后滑动,每次滑动一

avatar
n*9
8
今天最后一天吧,万一明天post不就悲剧了
avatar
c*2
9
有EAD卡的也希望能转H1B这样比较保险,楼主问题问题挺好的。
这位仇视名校的?说话这么刻薄。这么说话抬高自己了么?

【在 C********e 的大作中提到】
: 真是奇怪 你已经自己有了EAD employment authorization 为什么还要面试东家
: provide you sponsorship呢
: very confusing about what hell r u thinking ? 大概又是一个名校毕业的吧

avatar
j*e
10
第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从数组头开始往后滑动,每次滑动一

avatar
B*y
11
还是算了吧,就10刀而已。。。我老早就在犹豫去不去买个GC存起来,主要是lowes离
家太远,真是懒得折腾了。。。

【在 p*****n 的大作中提到】
: 多谢了
avatar
d*a
12
大家说说第三道题的O(n)解法吧?
avatar
w*r
13
当天刷卡也可以,不给直接问AMEX要,就说刷卡那天deadline一样给
avatar
w*x
14
第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
倒是店面给3题有点多
avatar
c*r
15
牛啊,电面3道题?
avatar
p*2
16

这题好像没练过。先说说我的想法再去看leetcode。
用一个queue,第一个数总保持最大的值。
每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
数,push进去。
如果当前的数大于尾巴, 把尾巴干掉。

【在 d******a 的大作中提到】
: 大家说说第三道题的O(n)解法吧?
avatar
a*o
17
2爷太牛比了!

【在 p*****2 的大作中提到】
:
: 这题好像没练过。先说说我的想法再去看leetcode。
: 用一个queue,第一个数总保持最大的值。
: 每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
: 数,push进去。
: 如果当前的数大于尾巴, 把尾巴干掉。

avatar
p*2
18
刚练了一个
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)
avatar
p*2
19
第一题
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
avatar
c*r
20
二爷真执着,见题必练~佩服

【在 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()
:

avatar
p*2
21
第二题
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")
avatar
p*2
22

昨天等了一晚上,没人上题。今天有机会得赶紧练练。

【在 c*******r 的大作中提到】
: 二爷真执着,见题必练~佩服
avatar
P*A
23
楼主跟我当初电面题目一模一样阿,
我估计面试官都一样。
看来他挺懒的,这么久了还不换题目

置。

【在 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从数组头开始往后滑动,每次滑动一

avatar
p*c
24
第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从数组头开始往后滑动,每次滑动一

avatar
p*2
25

是or 不是 and

【在 p***c 的大作中提到】
: 第2题谁能解释一下,thx.
: 若“aab”, “ab” => print “0” AND print “1”?
:
: 置。

avatar
h*e
26
同佩服。

【在 p*****2 的大作中提到】
:
: 是or 不是 and

avatar
q*x
27
三道有点多。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从数组头开始往后滑动,每次滑动一

avatar
p*2
28

膜拜Googler大牛

【在 h****e 的大作中提到】
: 同佩服。
avatar
x*6
29
最后一个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

avatar
x*6
30
原来只是要print任意一种情况。。。擦, 想了一晚上
avatar
p*2
31

牛。

【在 x*******6 的大作中提到】
: 原来只是要print任意一种情况。。。擦, 想了一晚上
avatar
s*0
32
2) is O(N), any time you see this kind of string question the answer is
always hash table...
avatar
w*m
33

哈哈是吗,那你的另一个面试官问了什么问题呀?

【在 P*A 的大作中提到】
: 楼主跟我当初电面题目一模一样阿,
: 我估计面试官都一样。
: 看来他挺懒的,这么久了还不换题目
:
: 置。

avatar
w*m
34

第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
推。
但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
,就要对这个k大小的窗口重新寻找最大值。
这个的最坏是O(N*k)的复杂度吧。

【在 w****x 的大作中提到】
: 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
: 倒是店面给3题有点多

avatar
i*7
35
果断拜见大牛。。。话说啥时候在Q上,有事情想问一下捏。

【在 p*****2 的大作中提到】
:
: 牛。

avatar
p*2
36

复杂度高了。看我的code吧。

【在 w****m 的大作中提到】
:
: 第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
: 比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
: ,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
: 推。
: 但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
: ,就要对这个k大小的窗口重新寻找最大值。
: 这个的最坏是O(N*k)的复杂度吧。

avatar
w*x
37

滔滔江水啊~~~

【在 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)

avatar
x*6
38

我自己做的也是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...

avatar
E*0
39
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;
}
avatar
B*1
40
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;

avatar
E*0
41
vector* GetAbsentPositions(string s1, string s2)
{
vector* rst=new vector();
int i=0,j=0;
while (jwhile (iif (s1[i]!=s2[j])
{
(*rst).push_back(i);
++i;
}
else
{
++j;
++i;
break;
}
while (i(*rst).push_back(i++);
return rst;
}
avatar
E*0
42
个人认为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)

avatar
E*0
43
3rd
I am thinking that maybe we can use heap to implement it.
avatar
E*0
44
容我review下heap的知识。
avatar
B*1
45
没有的话下面这句会越界
pre = a[i];

【在 E*******0 的大作中提到】
: 个人认为if (i==size) break; 不需要。
avatar
E*0
46
for (int i = 0; i < size; ) {
count = 1;
pre = a[i];
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
}
这样写会不会清楚些?感觉刚才那样写有点乱。
不过题目比较简单,无所谓了。我刚才只是提出我的个人意见而已。
avatar
B*1
47
是的,刚才写太快了,这样子更加简洁了。

【在 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;
: }
: 这样写会不会清楚些?感觉刚才那样写有点乱。

avatar
E*0
48
void GetMaxValueOfWindow(int* arr, int num,int k, list& rst)
{
rst.clear();
if (!arr || 0==num || numreturn;
for (int i=0;i<=num-k;i++)
{
priority_queue window(arr+i,arr+k+i);
rst.push_back(window.top());
}
return;
}
avatar
E*0
49
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).
avatar
E*0
50
感觉会有问题。你这个queue应该是heap吧。
如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个
不在当前window里面的数当做最大的数。
7 5 6 4 3 2 1

【在 p*****2 的大作中提到】
:
: 复杂度高了。看我的code吧。

avatar
p*2
51

你这个是求最大重复的吧?

【在 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)

avatar
l*s
52
第二题感觉应该有shortest edit distance
稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
应该是O(m*n)
avatar
b*e
53
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)解法吧?
avatar
g*e
54
我还联想到*a*b?c的情况,缺的相当于通配符

【在 l*******s 的大作中提到】
: 第二题感觉应该有shortest edit distance
: 稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
: 应该是O(m*n)

avatar
p*e
55
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

avatar
C*U
56
这个题就是min-stack的变形吧
那个题目要你insert pop min都是O(1)空间
这个题目就是max-queue 然后要insert pop max都是O(1)空间
做法就可以类似min-stack那个题目了

【在 p*****2 的大作中提到】
:
: 你这个是求最大重复的吧?

avatar
j*g
57
这题这么写行么,
("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;

avatar
h*n
58
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从数组头开始往后滑动,每次滑动一

avatar
A*n
59
第三题是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从数组头开始往后滑动,每次滑动一

avatar
l*1
60
上一个自己写的第三题的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;iif(!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;
}
}
avatar
w*o
61
第三题
思路跟二爷的差不多,只不过用数组实现,便于用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]]);
}
}
avatar
e*s
62
我觉得 ("abc","tc") 就是invalid input了,因为题目说了 第二字符串是第一字符串
的子集

【在 j********g 的大作中提到】
: 这题这么写行么,
: ("abc","tc")
: 好像就会输成 0 1 2啊
: 是不是还是得上hash table

avatar
e*s
63
二爷威武! 但是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()
:

avatar
m*k
64
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)

avatar
h*f
70
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).

avatar
w*m
71
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要两个人面?明天还有一个,不知道和这个是不是类似风格
的。
avatar
q*y
72
遇上这样的题目真是轻松愉快啊。
3要O(n)算法。
avatar
t*3
73
第三题不是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从数组头开始往后滑动,每次滑动一

avatar
j*e
74
第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从数组头开始往后滑动,每次滑动一

avatar
d*a
75
大家说说第三道题的O(n)解法吧?
avatar
w*x
76
第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
倒是店面给3题有点多
avatar
c*r
77
牛啊,电面3道题?
avatar
p*2
78

这题好像没练过。先说说我的想法再去看leetcode。
用一个queue,第一个数总保持最大的值。
每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
数,push进去。
如果当前的数大于尾巴, 把尾巴干掉。

【在 d******a 的大作中提到】
: 大家说说第三道题的O(n)解法吧?
avatar
a*o
79
2爷太牛比了!

【在 p*****2 的大作中提到】
:
: 这题好像没练过。先说说我的想法再去看leetcode。
: 用一个queue,第一个数总保持最大的值。
: 每当读一个新数,如果当前最大数过了window,就pop,然后如果当前的数小于最后的
: 数,push进去。
: 如果当前的数大于尾巴, 把尾巴干掉。

avatar
p*2
80
刚练了一个
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)
avatar
p*2
81
第一题
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
avatar
c*r
82
二爷真执着,见题必练~佩服

【在 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()
:

avatar
p*2
83
第二题
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")
avatar
p*2
84

昨天等了一晚上,没人上题。今天有机会得赶紧练练。

【在 c*******r 的大作中提到】
: 二爷真执着,见题必练~佩服
avatar
P*A
85
楼主跟我当初电面题目一模一样阿,
我估计面试官都一样。
看来他挺懒的,这么久了还不换题目

置。

【在 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从数组头开始往后滑动,每次滑动一

avatar
p*c
86
第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从数组头开始往后滑动,每次滑动一

avatar
p*2
87

是or 不是 and

【在 p***c 的大作中提到】
: 第2题谁能解释一下,thx.
: 若“aab”, “ab” => print “0” AND print “1”?
:
: 置。

avatar
h*e
88
同佩服。

【在 p*****2 的大作中提到】
:
: 是or 不是 and

avatar
q*x
89
三道有点多。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从数组头开始往后滑动,每次滑动一

avatar
p*2
90

膜拜Googler大牛

【在 h****e 的大作中提到】
: 同佩服。
avatar
x*6
91
最后一个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

avatar
x*6
92
原来只是要print任意一种情况。。。擦, 想了一晚上
avatar
p*2
93

牛。

【在 x*******6 的大作中提到】
: 原来只是要print任意一种情况。。。擦, 想了一晚上
avatar
s*0
94
2) is O(N), any time you see this kind of string question the answer is
always hash table...
avatar
w*m
95

哈哈是吗,那你的另一个面试官问了什么问题呀?

【在 P*A 的大作中提到】
: 楼主跟我当初电面题目一模一样阿,
: 我估计面试官都一样。
: 看来他挺懒的,这么久了还不换题目
:
: 置。

avatar
w*m
96

第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
推。
但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
,就要对这个k大小的窗口重新寻找最大值。
这个的最坏是O(N*k)的复杂度吧。

【在 w****x 的大作中提到】
: 第3题没啥好说的啊, 你要是店面给出O(N)的解法,面试官肯定知道你做过,无悬念。
: 倒是店面给3题有点多

avatar
i*7
97
果断拜见大牛。。。话说啥时候在Q上,有事情想问一下捏。

【在 p*****2 的大作中提到】
:
: 牛。

avatar
p*2
98

复杂度高了。看我的code吧。

【在 w****m 的大作中提到】
:
: 第3题我用的方法是,找第二个窗口的最大值的时候,把最后一个数值与第一个窗口的
: 比较,如果最后一个数值更大,那就输出最后一个数值,并把最大值改成最后一个数值
: ,找第三个窗口的最大值时,依然把窗口最后一个与第二个窗口的最大值比较,以此类
: 推。
: 但如果某个窗口的最大值是这个窗口的第一个数值,下一个窗口就不包含这个最大值了
: ,就要对这个k大小的窗口重新寻找最大值。
: 这个的最坏是O(N*k)的复杂度吧。

avatar
w*x
99

滔滔江水啊~~~

【在 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)

avatar
x*6
100

我自己做的也是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...

avatar
E*0
101
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;
}
avatar
B*1
102
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;

avatar
E*0
103
vector* GetAbsentPositions(string s1, string s2)
{
vector* rst=new vector();
int i=0,j=0;
while (jwhile (iif (s1[i]!=s2[j])
{
(*rst).push_back(i);
++i;
}
else
{
++j;
++i;
break;
}
while (i(*rst).push_back(i++);
return rst;
}
avatar
E*0
104
个人认为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)

avatar
E*0
105
3rd
I am thinking that maybe we can use heap to implement it.
avatar
E*0
106
容我review下heap的知识。
avatar
B*1
107
没有的话下面这句会越界
pre = a[i];

【在 E*******0 的大作中提到】
: 个人认为if (i==size) break; 不需要。
avatar
E*0
108
for (int i = 0; i < size; ) {
count = 1;
pre = a[i];
while (++i < size && a[i] == pre) {
count ++;
}
if (count > maxCount)
maxCount = count;
}
这样写会不会清楚些?感觉刚才那样写有点乱。
不过题目比较简单,无所谓了。我刚才只是提出我的个人意见而已。
avatar
B*1
109
是的,刚才写太快了,这样子更加简洁了。

【在 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;
: }
: 这样写会不会清楚些?感觉刚才那样写有点乱。

avatar
E*0
110
void GetMaxValueOfWindow(int* arr, int num,int k, list& rst)
{
rst.clear();
if (!arr || 0==num || numreturn;
for (int i=0;i<=num-k;i++)
{
priority_queue window(arr+i,arr+k+i);
rst.push_back(window.top());
}
return;
}
avatar
E*0
111
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).
avatar
E*0
112
感觉会有问题。你这个queue应该是heap吧。
如果这个queue里面有不在当前window的数,但却比当前新数要大,如何?你会把这个
不在当前window里面的数当做最大的数。
7 5 6 4 3 2 1

【在 p*****2 的大作中提到】
:
: 复杂度高了。看我的code吧。

avatar
p*2
113

你这个是求最大重复的吧?

【在 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)

avatar
l*s
114
第二题感觉应该有shortest edit distance
稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
应该是O(m*n)
avatar
b*e
115
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)解法吧?
avatar
g*e
116
我还联想到*a*b?c的情况,缺的相当于通配符

【在 l*******s 的大作中提到】
: 第二题感觉应该有shortest edit distance
: 稍微改改,就是在那个matrix里面保留delete或者insert,然后就可以了,
: 应该是O(m*n)

avatar
p*e
117
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

avatar
C*U
118
这个题就是min-stack的变形吧
那个题目要你insert pop min都是O(1)空间
这个题目就是max-queue 然后要insert pop max都是O(1)空间
做法就可以类似min-stack那个题目了

【在 p*****2 的大作中提到】
:
: 你这个是求最大重复的吧?

avatar
j*g
119
这题这么写行么,
("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;

avatar
h*n
120
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从数组头开始往后滑动,每次滑动一

avatar
A*n
121
第三题是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从数组头开始往后滑动,每次滑动一

avatar
l*1
122
上一个自己写的第三题的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;iif(!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;
}
}
avatar
w*o
123
第三题
思路跟二爷的差不多,只不过用数组实现,便于用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]]);
}
}
avatar
e*s
124
我觉得 ("abc","tc") 就是invalid input了,因为题目说了 第二字符串是第一字符串
的子集

【在 j********g 的大作中提到】
: 这题这么写行么,
: ("abc","tc")
: 好像就会输成 0 1 2啊
: 是不是还是得上hash table

avatar
e*s
125
二爷威武! 但是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()
:

avatar
m*k
126
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)

avatar
h*f
132
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).

avatar
b*s
133
O(n)也不难

【在 q***y 的大作中提到】
: 遇上这样的题目真是轻松愉快啊。
: 3要O(n)算法。

avatar
q*m
134
对于第二道题,
"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从数组头开始往后滑动,每次滑动一

avatar
a*3
135
第一题题意有点歧义,如果输入数组是{4, 5, 4, 4, 2, 2, 3, 3, 3},输出是1还是3
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。