1395 統計作戰單位數

2022-06-07 12:12:11 字數 1657 閱讀 2605

n名士兵站成一排。每個士兵都有乙個 獨一無二 的評分rating

每 3 個士兵可以組成乙個作戰單位,分組規則如下:

請你返回按上述條件可以組建的作戰單位數量。每個士兵都可以是多個作戰單位的一部分。

示例 1:

輸入:rating = [2,5,3,4,1]

輸出:3

解釋:我們可以組建三個作戰單位 (2,3,4)、(5,4,1)、(5,3,1) 。

示例 2:

輸入:rating = [2,1,3]

輸出:0

解釋:根據題目條件,我們無法組建作戰單位。

示例 3:

輸入: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...