腾讯算法笔试复盘求补充
真的难,就ac了第一题和第三题,第二题本地ac提交始终提示有问题。
第1题,大意是给你一个数组和k
求连续k个数和的最小值。
这题开胃菜,没啥难度,滑动窗口就是了,注意不要每次求和,时间肯定过不了
def minSum(nums, k): res, _sum = 0, sum(nums[:k]) _min = _sum for i, v in enumerate(nums[k:]): _sum = _sum - nums[i] + v if _sum < _min: res = i+2 _min = _sum return res
第3题,大意是现在给你两个数组,分别代表各原材料的已有量和再购买时的单价,一组原材料(各一个)可以生产出一个食品,在给定预算下最大能生产出多少食品
思路就是按原材料个数排序然后逐个逐个的补齐落差来购买一直到不能再购买为止
def maxGet(money, goods, prices): get = min(goods) # 现有储存能生产的量 goods = list(map(lambda x: x-get, goods)) # 更新库存 goods, prices = zip(*sorted(zip(goods, prices))) # 将goods,price都按库存剩余量排序 goods, prices = list(goods), list(prices) goods.append(float('inf')) # 添加哨兵 index = cost = 0 while 1: gap = goods[index+1]-goods[index] # 补齐index与index+1间差距的最大购买量 cost += prices[index] # 补齐一组0到index时需要的花费 if gap*cost < money: # 完全补齐后还有余钱 money -= gap*cost get += gap index += 1 else: # 否则能补多少是多少 get += money // cost break return get
第2题就是给你一个n*m的格子,每个格子可以最多踩一次或者踩两次,让你判断能不能从起点(start_x,start_y)走到(end_x,end_y)时刚好踩到(end_x,end_y)位置的最后一次。
我直接用的思路是dfs,本地调试给出的样例也通过,但提交时始终有问题,就不晒上来了,等大神题解。
后面两道题就不提了,题意都很复杂,记不起太多了,更别说解了。等大神补充。