阿里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))






#阿里320笔试题求大神帮忙看下对错##阿里巴巴##笔试题目#
全部评论
请问考试的时候可以用numpy吗
点赞
送花
回复
分享
发布于 2020-03-25 01:14

相关推荐

头像
点赞 评论 收藏
转发
点赞 10 评论
分享
牛客网
牛客企业服务