给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。
#方法一:前缀和
def subarraysDivByK(nums,k):
dic={0:1} #记录相同模值的前缀和
cur_sum,res=0,0 #记录当前前缀和
for i in range(len(nums)):
cur_sum+=nums[i]
tem=cur_sum%k #同余定理
if tem in dic:
res+=dic[tem] #加上该前缀和次数
dic[tem]+=1
else:
dic[tem]=1
return res
给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
#方法一:滑动窗口
def longestOnes(nums,k):
left,right,res,count=0,0,0,0
while rightk: #0超过了k
if nums[left]==0:
count-=1 #左边界遇到0则移动,直到0的个数<=k
left+=1
res=max(res,right-left+1) #更新个数
right+=1 #右边界移动
return res
车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)
给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。
当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
#方法一:差分+哈希表
def carPooling(trips,capacity):
dic={}
s=0
for i in range(len(trips)):
if trips[i][1] in dic:
dic[trips[i][1]]+=trips[i][0]#from处的人数上车后
else:
dic[trips[i][1]]=trips[i][0]
if trips[i][2] in dic:
dic[trips[i][2]]-=trips[i][0] #to处的人数下车后
else:
dic[trips[i][2]]=-1*trips[i][0]
for k in sorted(dic): #排序,保证一站一站来
s+=dic[k] #计算当前总人数
if s>capacity: #人太多了
return False
return True