腾讯算法笔试复盘求补充

真的难,就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,本地调试给出的样例也通过,但提交时始终有问题,就不晒上来了,等大神题解。

后面两道题就不提了,题意都很复杂,记不起太多了,更别说解了。等大神补充。

#腾讯##笔试题目##算法工程师#
全部评论
腾讯得不到的女人对你说两个字,呵呵
点赞 回复
分享
发布于 2019-08-17 23:37
第二题到底啥意思?这个“走到”是任意路径吗,可以回头难道不是肯定YES吗,就算不能回头,只要终点不靠边不也是肯定YES吗?第二个测试用例为什么是NO
点赞 回复
分享
发布于 2019-08-18 11:37
博乐游戏
校招火热招聘中
官网直投
第三题我用二分没ac,不知道哪里出问题了
点赞 回复
分享
发布于 2019-08-17 23:40
+1,也只ac了1和3😂
点赞 回复
分享
发布于 2019-08-17 23:48
给大佬把题补上 只a了第一道 坐等题解啊
点赞 回复
分享
发布于 2019-08-17 23:55
有没有大神说下第四题怎么做?
点赞 回复
分享
发布于 2019-08-18 00:04
 res, _sum = 1, sum(nums[:k]) res应该等于1
点赞 回复
分享
发布于 2019-08-20 10:32

相关推荐

1 45 评论
分享
牛客网
牛客企业服务