题解 | #分糖果问题#
分糖果问题
https://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # pick candy # @param arr int整型一维数组 the array # @return int整型 # class Solution: def candy(self , arr: List[int]) -> int: ans = 1 num = 1 spl = 0 spl2 = 1000 pre = arr[0] for i in arr[1:]: if(i == pre): num = 1 spl = 0 spl2 = 1000 else: spl = spl +1 if(i > pre): num = num+1 else: if(num == 1): num = 1 ans = ans + spl if(spl2 <= spl +1): ans = ans + 1 else: spl2 = num num = 1 spl = 0 ans = ans + num pre = i return ans
人生苦短,我用python。
这题很简答,就是容易脑抽踩坑。
首先相同的就相当于重置(可以当作分开的两段),
下一个更大,那么至少+1,
下一个更小,下意识的是不是觉得应该-1?其实不是,下一个直接设定为1。【1】这样才是最小的。
但如果已经是1呢?那么下一个才是1,之前的都要+1。
不过我们需要输出的值是总和,所以我们只要知道前面有多少个元素需要+1即可。
当下行数量小于上一次【1】执行的数字时,该数字后面的全部+1;
如果大于等于,那么这个数字也要+1,换句话说就是额外+1。
以上就是全部的思路了。这样可以做到一遍解决问题,不需要存储额外的数组。
当然了,官方的代码更加不烧脑,做题用那种估计更快更准确。存下结果,正反处理两遍即可。
#日常刷题#