給兩個整數陣列 a 和 b ,返回兩個陣列中公共的、長度最長的子陣列的長度。
說明:1 <= len(a), len(b) <= 1000
0 <= a[i], b[i] < 100
解題思路
1、利用滑動視窗將兩個數值進行對齊,最長重複子陣列在 a 和 b 中的開始位置相同,我們就可以對這兩個陣列進行一次遍歷,得到子陣列的長度。
2、對齊的方式有兩類:第一類為 a 不變,b 的首元素與 a 中的某個元素對齊;第二類為 b 不變,a 的首元素與 b 中的某個元素對齊。
#定義maxlength函式
defmaxlength
(adda:
int, addb:
int, length:
int)
->
int:
ret = k =
0#比較對齊的數的元素是否一致
for i in
range
(length)
:if a[adda + i]
== b[addb + i]
: k +=
1 ret =
max(ret, k)
else
: k =
0return ret
#n,m為a,b陣列的長度
n, m =
len(a)
,len
(b) ret =
0#a不變b滑動(b的首元素與a中某個元素對齊)length為a中未對齊的元素
for i in
range
(n):
length =
min(m, n - i)
ret =
max(ret, maxlength(i,
0, length)
)#b不變a滑動(a的首元素與b中某個元素對齊)length為b中未對齊的元素
for i in
range
(m):
length =
min(n, m - i)
ret =
max(ret, maxlength(
0, i, length)
)return ret
LeetCode每日一題 有序矩陣中第K小的元素
題目 給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第k小的元素。請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。1.找出二維矩陣中最小的數left,最大的數right,...
力扣第378題 有序矩陣中第K小的元素
給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素。請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。示例 matrix 1,5,9 10,11,13 12,13,15 k 8,返回 13。解法1 使用flat 加上sort 之後根據index進行...
力扣 378 有序矩陣中第K小的元素
思路 顯然易得矩陣最小值為m 0 0 m 0 0 m 0 0 最大值為m n 1 n 1 m n 1 n 1 m n 1 n 1 那麼我們可以二分第k kk小元素的值mid midmi d,再遍歷矩陣的每一行 或列 判斷 m id mid m id的數的總和,假設為num numnu m,如果num...