20170910算法工程师在线笔试

    今天三场笔试终于接近尾声了,接下来要歇歇工作了,晚上依旧很困,不过做题还是要提起精神,一共三道题,AC了2.4道,考完看到讨论区一堆大神再说只AC了2.9,哎,好心塞,感觉已经尽力了,也就这样了,趁着还有印象简单贴一下自己的方法,不过我的代码很low,写的时候只图过就行,莫笑。若有第三题平方串AC 的还希望不吝赐教,谢谢

第一题:括号深度问题

如:()()()深度为1,((()))深度为3

这个刚看到觉得很简单,觉得很块就做出来了,事实不是的,第一次的代码如下,AC率永远停在70%

one_str=raw_input()
one_list=list(one_str)
res_list=[]
count=1
for i in range(len(one_list)-1):
    j=i+1
    if one_list[i]==one_list[j]:
        count+=1
    else:
        res_list.append(count)
        count=1
print max(res_list)

修改后通过90%,这个做法和结果让我有点怀疑人生....如下:

one_str=raw_input()
if one_str:
    one=one_str.count('(')
    two=one_str.count(')')
    three=one_str.count('()')
    print max(one,two)-three+1
else:
    print 0

借助dp的思想AC了,如下:

one_str=raw_input()
one_list=list(one_str)
deep=0
res=0
res_list=[]
for one in one_list:
    if one=='(':
        res+=1
        deep=max(deep, res)
    else:
        res-=1
        deep=max(deep, res)
print deep


第二题:

cow编号问题

第一版找规律AC了40%,如下:


n=int(raw_input())
num_list=map(int, raw_input().split())
res=1
for i in range(len(num_list)):
    res*=(num_list[i]-i)
print res%1000000007

排序修改后AC了,(这个告诉我们有时候正确答案只有一步之遥):

n=int(raw_input())
num_list=map(int, raw_input().split())
num_list.sort()
res=1
for i in range(len(num_list)):
    res*=(num_list[i]-i)
print res%1000000007

第三题:

平方串问题,到最后还有15分钟不想做了,太累了,AC了40%

one_str=raw_input()
one_list=list(one_str)
new_list=list(set(one_list))
res_list=[]
res=0
for one in new_list:
    while one_list.count(one)>=2:
        one_list.pop(one_list.index(one))
        one_list.pop(one_list.index(one))
        res+=2
    else:
        pass
print res

欢迎交流,共同学习!

你可能感兴趣的:(算法,编程技术,面试工作)