刷力扣遇到的问题 - 坑总结 - 1
- 数组越界
error:
– list assignment index out of range
列表分配的索引超出范围
原因:
(1)List[index]的index由于循环遍历的i+1之类的操作,超出了列表范围;
(2)一个List是空的[ ],进行了List[0]的操作,也会导致这个报错;
解决:
(1)使用双指针等方法避免指针指向界外;
(2)用空的{}代替空的[],把[0]作为一个key,存入一个value,可以解决空的结构不能调用a[0]的问题;
- 滑动窗口的效率提升
背景:一个List,window_size = k,提取window中的最大值
普通办法:
– 窗口每滑动一步,就对比窗口中的所有值,找出最大;
优化办法:
– 因为第一个数在下一轮滑动将会滑出窗口,故每次把窗口的第一个数与窗口的剩下的数作比较,(1)若第一个数比剩下的都大,则比较第一个数和下一轮将会滑动进来的数即可找到下一轮的最大值;(2)若第一个数不是剩下的数中最大的,则在下一个窗口中对比[num:num+k]这几个数找最大值。
这两种情况下,第一种情况将会剩下很多时间。
max_num = max(nums[0:k])
C = [max_num]
for num in range(1,len(nums)-(k-1)):
if(nums[num-1]<max_num):
max_num = max(nums[num+k-1],max_num)
elif(nums[num-1]>=max_num):
max_num = max(nums[num:num+k])
C.append(max_num)
return (C)
- 特殊情况要记得处理!
比如输入空的list或者window_size > list_size的情况;
if (k==0 and not nums):
return ([])
if (k==1):
return nums
if (k==len(nums)):
return ([max(nums)])