阿里3.20笔试题
1.有一叠扑克牌,每张牌介于1和10之间 有四种出牌方法: 单出1张 出2张对子 出五张顺子,如12345 出三连对子,如112233 给10个数,表示1-10每种牌有几张,问最少要多少次能出完 def double_list(arr,time): for i in range(8): judge=True for j in range(i,i+3): if arr[j]<2: judge = False if judge== True: time = time +1 print('a') for w in range(i,i+3): arr[w]=arr[w]-2 arr,time = double_list(arr,time) return arr, time def five_list(arr,time): for i in range(6): judge = True for j in range(i,i+5): if arr[j]<1: judge = False if judge ==True: time= time+1 for w in range(i,i+5): arr[w]=arr[w]-1 arr,time=five_list(arr,time) return arr, time def double(arr,time): for i in range(len(arr)): if arr[i]>=2: time = time+1 arr[i]=arr[i]-2 arr,time=double(arr,time) return arr,time def single(arr,time): for i in range(len(arr)): if arr[i]!=0: time=time+1 arr[i]=arr[i]-1 arr,time=single(arr,time) return arr,time arr_ = [4,4,1,4,4,1,4,4,1,4] arr = list(arr_) time = 0 arr, time = double_list(arr,time) arr, time = five_list(arr,time) arr, time = double(arr,time) arr, time = single(arr,time) print(time) 这个例子运行下来是15次。 求大神帮忙看下是否正确。好像时间复杂度有点高。。。
#题目大概是这样的,小明在学旋律,每段旋律都可以用字符串来表示,并且旋律的每个 #字符的ASCALL码递增的比如以下4段旋律 : #aaa bcd bcdef zzz #现在就是要求,小明能够吧这些旋律拼接起来组成最长的旋律。 #比如上述例子输出 11 最长的旋律为 aaabcdefzzz import numpy as np def longest(arr): new_arr =[] for i in range(len(arr)): result = True for j in range(1,len(arr[i])): if ord(arr[i][j])<ord(arr[i][j-1]): result = False break if re == True: new_arr.append(arr[i]) new_arr.sort() opt = np.zeros(len(new_arr)) opt[0]= len(new_arr[0]) for i in range(1,len(new_arr)): x = org(new_arr[i][0]) length = len(new_arr[i]) for j in range(i): y = org(new_arr[j][-1]) if x >= y: length = max(opt[j]+len(new_arr[i]),length) opt[i] = length return opt[len(new_arr)-1] arr = [[a,a,a],[b,c,d],[b,c,d,e,f],[z,z,z]] print(longest(arr))