3.20 拼多多笔试
第一题,二分,ac
if __name__ == '__main__': N = int(input()) while N: n = int(input()) if n <= 2: print(n) else: res = 0 while n > 0: n = n // 2 res += 1 print(res) N -= 1
第二题,去重加重复删除,ac
if __name__ == '__main__': input() ary = list(map(int, input().split())) table = dict().fromkeys(ary, 0) for i in ary: table[i] += 1 res = 0 while sum(table.values()) > 0: s = set() for i in table.keys(): if table[i] > 0: s.add(i) for i in s: table[i] -= 1 res += 1 print(res)
第三题,leetcode接雨水的二维版,dp没想出方程来,思路是计算每一层接的雨水相加,没做完
def solution(p, max_val, n, m): res = 0 for _ in range(max_val): tmp = [[0 for i in range(n)] for j in range(m)] for i in range(m): for j in range(n): if p[i][j] > 0: p[i][j] -= 1 tmp[i][j] = 1 res += count_val(tmp, n, m) return res def count_val(tmp, n, m): res = 0 pb = [[True for _ in range(n)] for _ in range(m)] for i in range(1, m-1): for j in range(1, n-1): if tmp[i][j] == 0 and pb[i][j]: c = [1] pb[i][j] = False dfs(tmp, pb, i, j, c, n, m) res += c[0] return res def dfs(p, pb, i, j, c): for neigh in get_neigh(i, j, n, m): pass def get_neigh(i, j): pass if __name__ == '__main__': n, m = tuple(map(int, input().split())) p = [] for i in range(m): p.append(list(map(int, input().split()))) max_val = max([max(i) for i in p]) res = solution(p, max_val, n, m) print(res)

查看1道真题和解析