力扣刷题 day35:10-04

1.和可被 K 整除的子数组

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。

子数组 是数组的 连续 部分。力扣刷题 day35:10-04_第1张图片

方法一:前缀和 

#方法一:前缀和
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

2.最大连续1的个数 III

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。

力扣刷题 day35:10-04_第2张图片

方法一:滑动窗口

#方法一:滑动窗口
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

3.拼车 

车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)

给定整数 capacity 和一个数组 trips ,  trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。

当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。力扣刷题 day35:10-04_第3张图片

方法一:差分+哈希表 

#方法一:差分+哈希表
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  

你可能感兴趣的:(力扣刷题,leetcode,算法,数据结构)