日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文巾解题 523. 连续的子数组和

發(fā)布時(shí)間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文巾解题 523. 连续的子数组和 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1? 題目描述

2 解題思路

2.1 前綴和+逐元素遍歷

一開始想用前綴和+逐起止坐標(biāo)來遍歷的方法判斷有沒有符合條件的子數(shù)組。(就是先算出a[0], a[0]+a[1], a[0]+a[1]+a[2]+....這些,然后計(jì)算sum(nums[i:j])的時(shí)候,只需要算前j個(gè)的和 減去 前(i-1)個(gè)的和就可以了。但是這樣會(huì)超時(shí)。

class Solution:def checkSubarraySum(self, nums: List[int], k: int) -> bool:tmp=[0]for i in nums:tmp.append(i+tmp[-1]) #求前綴和#逐起止坐標(biāo)遍歷for i in range(len(nums)-1):for j in range(i+1,len(nums)):#print(i,j,tmp[j],tmp[i])if((tmp[j+1]-tmp[i])%k==0):return(True)return False

2.2 前綴和+哈希表

換一個(gè)思路想,我們記sum(K)是前K個(gè)元素的前綴和,那么什么時(shí)候sum(nums[i:j]),即sum(j)-sum(i-1)可以被k整除呢?那應(yīng)該是sum(j)和sum(i-1)被k除后的余數(shù)相等。

所以我們可以建立一個(gè)哈希表,記錄我們sum到下標(biāo)為幾的元素時(shí),這些元素的前綴和被k除后的余數(shù)。如果之后的前綴和余數(shù) 和之前存在哈希表中的前綴和余數(shù)相同,那么我們看一下他們分別sum到那個(gè)下標(biāo)了,如果兩個(gè)下標(biāo)的差大于等于2,那么就存在這樣的子數(shù)組。(比如sum(i)和sum(j)的k余數(shù)時(shí)一樣的,那么i+1~j這些元素組成的子數(shù)組滿足條件)

有一點(diǎn)需要注意的是,這個(gè)哈希表我們得存一個(gè)(0,-1),表示我們一個(gè)都沒有sum的情況下的前綴和。

class Solution:def checkSubarraySum(self, nums: List[int], k: int) -> bool:dit={0:-1}tmp=0for i in range(len(nums)):tmp=(tmp+nums[i])%kif tmp not in dit:dit[tmp]=ielse:if(i-dit[tmp]>=2):return(True)return False

?

總結(jié)

以上是生活随笔為你收集整理的文巾解题 523. 连续的子数组和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。