滴滴 秋招 笔试
1.算法:给定一个长度为n的数组,我们可以执行一种操作。每次操作可以从数组第二个元素到最后一个元素中选择任意一个元素。将选中元素的一半向下取整后加到数组的第一个元素上,同时该选中元素自身减去这个向下取整的值。我们需要重复进行这样的操作,直到数组的第一个元素大于或等于数组中所有其他元素。要求找出最少需要多少次操作才能达到这个目标。
思路:使用最大堆存储非首元素。每次取出最大元素,将其一半加到首元素,剩余部分放回堆中。重复直到首元素大于等于堆中最大值。操作次数即为答案。
2.算法:给定一个n乘n的网格,每个格子有一个数值。从左上角起点出发,要移动到右下角终点,每次只能向右或向下移动。移动时有特殊规则:当向右移动时,必须拿走当前所在格子的数值;当向下移动时,必须不拿当前所在格子的数值。目标是选择一条从起点到终点的路径,并决定沿途每个格子的取舍,使得最终获得的总数值最大。
思路:使用动态规划解决。定义dp[i][j][0/1]表示到达(i,j)格子且不拿/拿该格子时的最大价值。根据移动规则进行状态转移:向右移动需要拿当前格才能转移,向下移动需要不拿当前格才能转移。最终取到达终点时的两种状态最大值作为答案。
#秋招笔面试记录# #秋招笔试记录##秋招投递记录##牛客AI配图神器#
思路:使用最大堆存储非首元素。每次取出最大元素,将其一半加到首元素,剩余部分放回堆中。重复直到首元素大于等于堆中最大值。操作次数即为答案。
2.算法:给定一个n乘n的网格,每个格子有一个数值。从左上角起点出发,要移动到右下角终点,每次只能向右或向下移动。移动时有特殊规则:当向右移动时,必须拿走当前所在格子的数值;当向下移动时,必须不拿当前所在格子的数值。目标是选择一条从起点到终点的路径,并决定沿途每个格子的取舍,使得最终获得的总数值最大。
思路:使用动态规划解决。定义dp[i][j][0/1]表示到达(i,j)格子且不拿/拿该格子时的最大价值。根据移动规则进行状态转移:向右移动需要拿当前格才能转移,向下移动需要不拿当前格才能转移。最终取到达终点时的两种状态最大值作为答案。
#秋招笔面试记录# #秋招笔试记录##秋招投递记录##牛客AI配图神器#
全部评论
相关推荐
09-17 18:05
河南大学 嵌入式工程师 点赞 评论 收藏
分享