n
名士兵站成一排。每個士兵都有乙個 獨一無二 的評分rating
。
每 3 個士兵可以組成乙個作戰單位,分組規則如下:
請你返回按上述條件可以組建的作戰單位數量。每個士兵都可以是多個作戰單位的一部分。
示例 1:
輸入:rating = [2,5,3,4,1]示例 2:輸出:3
解釋:我們可以組建三個作戰單位 (2,3,4)、(5,4,1)、(5,3,1) 。
輸入:rating = [2,1,3]示例 3:輸出:0
解釋:根據題目條件,我們無法組建作戰單位。
輸入:rating = [1,2,3,4]輸出:4
方法一:動態規劃
1.dp[i]記錄的是第i個數之前比其值小的數的個數;
2.兩層判斷,如果nums[i] > nums[idx], 更新dp[i],其次,如果dp[idx]>0則再更新res。因為此時,num[i]已經大於nums[idx],再算上乙個比nums[idx]小的數,就構成了乙個3個數的公升序,這樣的組合有dp[idx];
3.另外的一種情況,將陣列逆序即可。
class solution:def numteams(self, rating: list[int]) -> int:
def func(nums):
dp = [0] * len_
res = 0
for i in range(1, len_):
idx = i - 1
while idx >= 0:
if nums[i] > nums[idx]:
dp[i] += 1
if dp[idx] > 0:
res += dp[idx]
idx -= 1
return res
len_ = len(rating)
return func(rating[::-1]) + func(rating)
方法二:回溯法
class solution: ###比沒有考慮len(path)==3的情況加break導致超時def numteams(self, rating):
self.res=0
self.dfs(rating,)
return self.res
def dfs(self,rating,path):
if self.is_valid(path):
self.res += 1
return
for i in range(len(rating)):
if len(path)<3:
self.dfs(rating[i+1:],path)
path.pop()
else: ###len(path)==3 那麼就可以回到上一層了 而不需要繼續遍歷
break
def is_valid(self,p):
if len(p)==3:
return p[0]>p[1]>p[2] or p[0]
leetcode 1395 統計作戰單位數
統計作戰單位數 n 名士兵站成一排。每個士兵都有乙個 獨一無二 的評分 rating 每 3 個士兵可以組成乙個作戰單位,分組規則如下 從隊伍中選出下標分別為 i j k 的 3 名士兵,他們的評分分別為 rating i rating j rating k 作戰單位需滿足 rating i rat...
無單位數字line height
首先我們來了解一下line height的單位有哪些 1.normal 2.inherit 3.number 4.number px em rem 5.line height屬性最特別的地方在於可以支援帶單位的值,也可以支援不帶單位的值,那這兩種直接有什麼區別呢?我們先看下面的例子 知道了無單位數字...
個位數統計
時間限制 100 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 給定乙個k位整數n dk 1 10k 1 d1 101 d0 0 di 9,i 0,k 1,dk 1 0 請編寫程式統計每種不同的個位數字出現的次數。例如 給定n 100...