2022阿里4.22算法笔试题

1.

单选和多选都是六道,具体题目忘记了,大部分都是概率论知识

2.

贪吃蛇:

n行m列地图,从某个位置出发,怎么走由WSAD组成(就是对应上下左右),遇到$就吃掉,*表示蛇,.表示空地,很简单,就是需要一个数组来定义食物有没有被吃,防止重复计算

代码:
AC100%

nm = list(map(int, input().split()))
n, m = nm[0], nm[1]

map = []
start = 0
for i in range(n):
    temp = list(''.join(input()))
    if '*' in temp:
        start = [i, temp.index('*')]
    map.append(temp)

path = list(''.join(input()))

hashmap = {'W': [-1, 0], 'S': [1, 0], 'D':[0, 1], 'A':[0, -1]}
res = 0
flag = [[False]*m for _ in range(n)]
for p in path:
    if 0 <= hashmap[p][0] + start[0] < n and 0 <= hashmap[p][1] + start[1] < m:
        start[0] = hashmap[p][0] + start[0]
        start[1] = hashmap[p][1] + start[1]
        if map[start[0]][start[1]] == '$' and flag[start[0]][start[1]] == False:
        	flag[start[0]][start[1]] == True
            res += 1
print(res)

3.

关于日期的题目,时间不够了,难受,题目判断条件多(比如2月不超过28天,年份不超过2022-9999),但是简单,细心一点可以AK的,具体内容忘记了

4.

给定数组,最少删除多少数字,可以让数组保持严格递增:

思路:
找到最长递增序列,删除他的长度就可以
代码:
AC20%

n = int(input())
a = list(map(int, input().split()))

dif = [0]*(n-1)

for i in range(1, n, 1):
    dif[i-1] = a[i] - a[i-1]

print(dif)

maxres = 0
res = 0
for i in range(len(dif)):
    if dif[i] > 0:
        maxres += 1
        res = max(maxres, res)
    elif dif[i] == 0:
        res -= 1
    else:
        maxres = 0

print(n - res - 1)

优化:
最长严格递增可能不连续,,这是自己在上面没有注意到的点,所以使用temp来存储递增最后一位,对于新的一位进行判断
自己感觉问题在这里,已经无法验证了

n = int(input())
a = list(map(int, input().split()))

dif = [0]*(n-1)

for i in range(1, n, 1):
    dif[i-1] = a[i] - a[i-1]

print(dif)

maxres = 0
res = 0
temp = [0]
for i in range(len(dif)):
    if dif[i] > 0:
        if a[i+1] > temp[-1]:
            temp.append(a[i+1])
            maxres += 1
        else:
            maxres = 0
        res = max(maxres, res)
    elif dif[i] == 0:
        res -= 1
    else:
        maxres = 0

print(n - res - 1)
posted @ 2022-04-22 15:50  小Aer  阅读(6)  评论(0编辑  收藏  举报  来源