生活随笔
收集整理的這篇文章主要介紹了
LeetCode 795. 区间子数组个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個元素都是正整數的數組A ,正整數 L 以及 R (L <= R)。
求連續、非空且其中最大元素滿足大于等于L 小于等于R的子數組個數。
例如 :
輸入:
A = [2, 1, 4, 3]
L = 2
R = 3
輸出: 3
解釋: 滿足條件的子數組: [2], [2, 1], [3].
注意:
L, R 和 A[i] 都是整數,范圍在 [0, 10^9]。
數組 A 的長度范圍在[1, 50000]。
'''
給定一個元素都是正整數的數組A ,正整數 L 以及 R (L <= R)。求連續、非空且其中最大元素滿足大于等于L 小于等于R的子數組個數。例如 :
輸入:
A = [2, 1, 4, 3]
L = 2
R = 3
輸出: 3
解釋: 滿足條件的子數組: [2], [2, 1], [3].
注意:L, R 和 A[i] 都是整數,范圍在 [0, 10^9]。
數組 A 的長度范圍在[1, 50000]。'''class Statistical_subarray(object):def record_index(self
, A
, L
, R
):'''該函數用以記錄L、R范圍內的值可以產生的子數組個數A 是一個正整數的數組L 是一個正整數R 是一個正整數且R>L'''index_dictionary
= {}total
= 0for i
, num
in enumerate(A
):n
, m
= 0, 0 if num
>= L
and num
<= R
:j
, k
= i
- 1, i
+ 1while j
>= 0:if A
[j
] <= num
:j
= j
- 1n
= n
+ 1 else:breakwhile k
<= len(A
) - 1:if A
[k
] <= num
:k
= k
+ 1m
= m
+ 1 else:breakindex_dictionary
[num
] = (m
+ 1) * (n
+ 1)total
= total
+ (m
+ 1) * (n
+ 1)return total
def numSubarrayBoundedMax(self
, A
, L
, R
):""":type A: List[int]:type L: int:type R: int:rtype: int"""n
= len(A
)res
= 0tmp
= 0first
= 0for i
in range(n
):if A
[i
] > R
:first
= i
+ 1tmp
= 0continueelif A
[i
] >= L
and A
[i
] <= R
:tmp
= i
- first
+ 1res
+= tmp
else:if tmp
> 0:res
+= tmp
return res
if __name__
== "__main__":A
= [2, 1, 4, 5, 6, 7, 3]L
= 2R
= 4C
= Statistical_subarray
()D
= C
.record_index
(A
, L
, R
)E
= C
.numSubarrayBoundedMax
(A
, L
, R
)print("輸出:", D
)print("csdn的答案輸出:", E
)
這是兩種想法的解答,第一種是我自己編寫的,第二種是看的csdn的答案取自該鏈接:https://blog.csdn.net/Cold_Sun_/article/details/100763932
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的LeetCode 795. 区间子数组个数的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。