小码在哪里,小青来找你 | 青训营 X 码上掘金

27 阅读2分钟

当青训营遇上码上掘金

主要包括主题选择和题目分析的思路

主题选择

主题 3:寻友之旅

小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。 步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1 公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)

请帮助小青通知小码,小青最快到达时间是多久? 输入: 两个整数 N 和 K 输出: 小青到小码家所需的最短时间(以分钟为单位)

主题 4:攒青豆

现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积)

官方主要推荐后端的同学选择主题3或者4,因此我从3和4中进行选题。主题4虽然比较符合本次主题,但是直观上主题3更好理解,因此,选择主题3

主题3题目分析

小青地点:N 小码地点:K

小青步行:每次可以走一步,可以向前走,也可以向后走

小青公交:只能先前,每次移动的距离是在动态变化的,并且每次的距离是X(问题:这里的x的表示的什么含义?)

分析可能的情况:

(1)排除当K = N,这种情况是不存在,这是因为小青和小码不可能住在一起

(2)当K<N,也就是说小青的家在小码的前面,而小青不可能往后走,因此此时只能选择步行,此时花费的时间为(N-K)分钟

(3)当K>N的时候,此时小青可以选择步行,也可以选择公交

对于第三种情况,情况会更多一些

a.当N=0时,此时第一步只能步行,因此此时X=0,2X依然为0,相当于这个位置没有公交

b.当N=1时间,此时可以坐公交,也可以步行

基于此,设定以下一些参数并展开详细讨论

  • time 用来统计小青的总耗时,开始肯定是0
  • res用来表示小青所在的位置 当前位置能移动到的距离为2res

如果2res < N 那么可以直接选择公交,毫不犹豫,每次移动加1分钟

如果2res =N那么也是直接选择公交,每次移动加1分钟

如果2res >N,因为是不能坐公交倒退,所以此时需要进行判断, Math.min(1 + (2res-N) ,N-res)