华为4-15实习笔试,三道题分别100+100+70,python实现
第一题,就是单纯的统计计数 AC
投票问题计算谁获得的票数最多,平票的时候按名字排序
输入样例就是代码中的第一行
''' Tom,Lily,Tom,Lucy,Lucy,Jack ''' # 100% def test(name): return name[0].isupper() and name[1:].islower() def solution(l): dic = {} res = None key = 0 for val in l: if not test(val): print("error.0001") return if val in dic: dic[val] += 1 else: dic[val] = 1 if not res: res = val key = dic[val] else: if dic[val] > key: key = dic[val] res = val elif dic[val] == key: if val < res: key = dic[val] res = val print(res) if __name__ == '__main__': l = input().split(',') solution(l)
第二题,就是匹配 AC
会正则的应该会特别快,不过我不太记得正则的用法,但是python处理字符串效率还是很高的
主要就是不停的根据几个标志进行切分。
字符串匹配,就是保证'['前的字符要和第一个关键词就是read 是一样的,中间也要保证十六进制,和必须有addr,mask,valzh
''' read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80] ''' def judge(l): l1 = [] l2 = [] for item in l.split(','): x, y = item.split('=') l1.append(x) try: eval(y) l2.append(y) except: return False return l2 if __name__ == '__main__': keyword, str = input().split(' ') strList = str.split('],') strList[-1] = strList[-1].replace(']', '') flag = False for i in range(len(strList)): key, value = strList[i].split('[') if key == keyword: tmp = judge(value) if tmp: flag = True print(' '.join(tmp)+'\r\n',end='') if not flag: print("FAIL")
第三题,DFS或者DP都可以应该 70%
计算函数调用的最带栈开销
一开始显示有越界的问题,后来改到没有越界之类的问题,就单纯应该是部分测试样例的结果不同。
我是用的DP做的
dic{ 1:2,3, 2:3,4,5 3:4 } dp[i]=max([dp[val] for val in dic[i])
代码
''' 6 2 3 1 0 0 1 20 2 3 2 30 3 4 5 3 50 4 4 60 5 80 6 90 ''' res = dict() def helper(idx, map_x, costs,pre,val): if val in pre: print("R") exit(0) else: pre.add(val) if idx in res: return res[idx] else: if idx in map_x: res[idx]=max( [helper(val, map_x, costs,pre.copy(),val) for val in map_x[idx]] ) else: res[idx]=0 if idx >= len(costs): print('NA') exit(0) res[idx]+=costs[idx] return res[idx] if __name__ == '__main__': line0 = input().split(' ') n = int(line0[0]) costs = [0] map_x = dict() for i in range(n): l = [int(item) for item in input().split(' ')] costs.append(l[1]) if l[2:]: map_x[l[0]] = l[2:] maxres=0 for idx in range(1, n + 1): if idx not in res and idx in map_x: res[idx] = max( [helper(val, map_x, costs,set(),val) for val in map_x[idx]] ) + costs[idx] elif idx not in map_x: res[idx]=costs[idx] maxres=max(maxres,res[idx]) print(maxres)