(力扣每日一題)有序矩陣中第K小的元素

2021-10-07 17:56:10 字數 1432 閱讀 9641

給兩個整數陣列 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...