滑动窗口-7
1652. 拆炸弹
题目来源:1652. 拆炸弹 - 力扣(LeetCode)
分析:
1. 窗口固定为k 只不过移动方向随k对正负变化
2. 我区分了 k > 0 and k < 0 的情况
3. 在不同方向上进行逻辑移动,不用方向也移动的逻辑还不同,所以花费了比较多的时间来做这道“简单题”
我的解答:
class Solution: def decrypt(self, code: List[int], k: int) -> List[int]: if k == 0: return [0 for i in range(len(code))] if k > 0: ans = [] ans_tmp = 0 last_num = 0 left = 0 for right,num in enumerate(code): # in ans_tmp += num left = right + 1 - k if left = 0: continue ans[left + 1] = ans_tmp ans_tmp -= code[left ] for right in range(0,k,-1): ans_tmp += code[right] left = right - k ans[left] = ans_tmp ans_tmp -= code[left - 1] return ans
题解:
class Solution: def decrypt(self, code: List[int], k: int) -> List[int]: n = len(code) ans = [0] * n r = k + 1 if k > 0 else n # 第一个窗口的右开端点 k = abs(k) s = sum(code[r - k: r]) # ans[0] for i in range(n): ans[i] = s s += code[r % n] - code[(r - k) % n] r += 1 return ans
总结:
1. 找规律
2. 我想我没有找到题解这个规律,应该是刷的题目,太少了,就导致解题思路以及思维方式比较局限
3. 题解上面还有一个作者的分析思路,我认为该分析方法十分重要,通过手绘来寻找算法规律,然后开始敲代码