毒蘑菇 最大体力

location_bigger = [0]
m = 3 # 初始体力
N = 9 # 方块个数

A = [1, 2, -1, -2, -1, -2, 1, 1, 2]
#A = [1, 2, 1, 2, 1, 2, 1, 1, 2] # 每个方块上增加的体力值

# 查询出增加体力值 >=1 的位置
for i in range (0, N):
    if A[i] >= 1:
        location_bigger.append(i+1)
length_location_bigger = len(location_bigger)

A_sum = [m]
for j in range (1, length_location_bigger):
    X = A_sum[j-1]+A[location_bigger[j]-1]-(location_bigger[j]-location_bigger[j-1])
    A_sum.append(X)

sort_A_sum = A_sum.copy()
sort_A_sum.sort()
if sort_A_sum[0] <= 0:
    print('can not finish')
else:
    print(A_sum[-1])

题目:从起点开始接下来有 n 个方块,相邻方块间的距离都为 1,每个方块上有增加体力的食用蘑菇或减少体力的毒蘑菇,蘑菇带来的体力改变是已知的。一个人初始体力为 m,每次可以往前跳任意个方块,体力耗尽就会死掉。每跳一次消耗的体力与跳的距离成正比,比例为 1。问这个人能否跳到终点,如果能,求可能剩余的最大体力。

1. 本人之前未接触过python,刚学了一周,故还有一大部分函数没有用过,只能用最基本的思路来解决这个问题,如果有哪位大哥可以更简单的解决问题,请留言但勿喷.
2. 一直以为算法工程师就是安心做算法,而且最好是博士期间算法的应用或者延申,但是目前面试结果来看,算法不重要,刷题才是根本.

题目困惑 1 . 就我个人来说,首先会考虑的是食用蘑菇增加多少体力,毒蘑菇减少多少体力,每次增加或减少的体力是否一样等等的问题(我刚看到这个题就是这么想的,因为本人读博期间只研究时间序列,单变量多变量,而且从没有接触过python,所以遇到这个问题,觉得很多数据都是未知的,如果直接给一个list肯定是更清晰的)。但在这个问题里,不要考虑这个,面试官只是把一个list用一系列的方块来描述了,而且每个方块上的值就是对应的list中的值(大于0即为食用蘑菇,小于0即为毒蘑菇)。
题目困惑 2 . 就这个问题而言,我们要考虑的是,在蹦之前就消耗掉了体力,还是吃掉蘑菇之后才消耗蹦那一下的体力。比如,这个人当前体力为 1,如果蹦之前就消耗体力,那么无论接下来怎样,都会在蹦那一瞬间死掉,这是一种分析方法;而如果是吃完蘑菇后消耗蹦那一下的体力,则是另一种分析方法。而在面试官的思路中,应当是吃掉蘑菇后再消耗之前蹦的体力,即后一种分析方法。

解题思路:
第一步:先举一个简单的例子,初始体力为 m,一个长度为 6 的方块(即长度为 6 的list):[1, 2, -1, 2, 3, 4],跳到第一个上面,当前体力为 m+1-1,再跳到第二个上面,体力为 m+1-1+2-1,那么可以得出,只要数字大于等于1,那么都应该往这个方块上跳。
第二步:这个人当前体力为m,离这个人目前位置最近的下一个 >=1 的数字(x)与这个人当前的距离(d),如果d>m+x,则无法到达终点,如果不存在这样的问题,则可以到达终点,最大的体力即所有大于等于1的数字相加,加上初始体力m,再减去方块数量n。因为面试官说是从地上跳上去的,所以跳到第一个上面也需要消耗一个体力,因为总木块数量为n,所以当到达终点时,一共消耗的体力为 n。

测试list1:[1, 2, -1, -2, -1, -2, 1, 1, 2], 初始体力 m<4 时,则不能到达终点,输出为-1;初始体力 m>=4 时,可以抵达终点,最终结果为 m-2
测试list2:[1, 2, 1, 2, 1, 2, 1, 1, 2], 最终结果为 (m+1+2+1+2+1+2+1+1+2-9 = m+4)
#字节跳动##笔试题目#
全部评论
```go func bMmxI9(nums []int, m int) (int, bool) { end := m for now := 0; now < len(nums) && now < end; now++ { if nums[now] > 0 { end += nums[now] } } return end - len(nums), end-len(nums) >= 0 } func main() { fmt.Println(bMmxI9([]int{1, 2, 1, 2, 1, 2, 1, 1, 2}, 3)) } ```
点赞 回复 分享
发布于 2022-11-09 16:04 陕西

相关推荐

评论
6
5
分享

创作者周榜

更多
牛客网
牛客企业服务