当前位置: 首页 > 面试经验 >

9.4字节笔试

优质
小牛编辑
115浏览
2023-03-28

9.4字节笔试

算法岗位笔试,四道编程
1. 棋盘每个位置为-1,0,或者得分。-1则往左下或右下走,0和对应得分往下掉。求从第一行开始能够得到的最大得分。
思路:感觉就是个dp从下往上,返回第一行最大的即可,但是最后只过了60%的case,不是很懂为什么,贴一下代码求解答。
import sys
s = list(sys.stdin.readline().strip().split(' '))
n, m = int(s[0]), int(s[1])
arr = []
for i in range(n):
    arr.append(list(map(int,input().split())))
dp = [[0 for _ in range(m)] for _ in range(n)]
dp[n-1] = arr[n-1]
for i in range(n-2,-1,-1):
    for j in range(m):
        if arr[i][j] == -1:
            if j-1>=0 and j<=m-2:
                dp[i][j] = max(dp[i+1][j-1],dp[i+1][j+1])
            elif j-1<0 and j<=m-2:
                dp[i][j] = dp[i+1][j+1]
            elif j-1>=0 and j>m-2:
                dp[i][j] = dp[i+1][j-1]

        else:
            dp[i][j] = dp[i+1][j]+arr[i][j]
print(max(dp[0]))

2. 数组中判断有无三个数对应index i<j<k的和也在数组中,输出YES or NO.
思路:直接挨个遍历数组,每次将所有的连续的和存起来,在用set判断是否存在,但是我好像只考虑了三个连着的时候,最后通过了90%的case。
t = int(input().strip())
for i in range(t):
    n = int(input().strip())
    arr = list(map(int, input().split()))
    s = set(arr)
    nums = []
    flag = True
    for i in range(n - 2):
        num = arr[i] + arr[i + 1] + arr[i + 2]
        nums.append(num)
    for num in nums:
        if num not in s:
            flag = False
    if flag:
        print("YES")
    else:
        print("NO")

3. 第三题如果没记错的话是和leetcode424非常像,但是多了一个条件是每个位置都对应0或1,0表示不能替换,1表示可以替换。
这个地方我直接按照lc424去做了,但是位置能否替换的条件一直没想出来,样例过了但是用例没过。

4. 什么A/B test实验的问题,已经没有时间看了,果断放弃。。。


#字节笔试##字节跳动##字节#
 类似资料: