1、子数组问题
注意:子数组是连续的,不同于子序列
子数组中的元素个数为k,滑动平均法
以和为例,先选前k个元素作为一个窗口,计算出当前的和值,如果该值小于目标值,滑动窗口,也就是当前的和加上后面一个元素减去第一个元素得到滑动之后的和值,再次判断,不断滑动。
def numOfSubarrays(self, arr, k, threshold):
count = 0
now_avg = sum(arr[0:k])
j = 0
if now_avg>=k*threshold:
count +=1
for i in range(k,len(arr)):
now_avg = now_avg +arr[i] -arr[j]
j += 1
if now_avg >=k*threshold:
count += 1
return count
2、如何取出二维数组的对角线元素?
tran = [list1[i][i] for i in range(len(list))
*****3、如何将一个含有字符串的列表转换为二维数组?
list1=['abc','edf', 'rds']
arr = [list(row) for row in list1]
当然,也可以转换成子问题:如何使一个字符串转换为列表,这样可以同时获取元素和下标?
a ='8733'
arr=list(a)
# output:['8','7','3','3']
这样比直接对字符串本身进行循环遍历好用得多
盲点:
1、时间复杂度为O(logn)的算法: 一般选择二分查找法,要先排序,或者数组中是局部排序的,如查找峰值。
2、如何获取数组中某个元素的下标?
nums.index(要查找的元素)