給你一個(gè)整數(shù)數(shù)組 nums ,找到其中最長(zhǎng)嚴(yán)格遞增子序列的長(zhǎng)度。
子序列是由數(shù)組派生而來(lái)的序列,刪除(或不刪除)數(shù)組中的元素而不改變其余元素的順序蛙奖。例如,[3,6,2,7] 是數(shù)組 [0,3,1,6,2,2,7] 的子序列杆兵。
示例 1:
輸入:nums = [10,9,2,5,3,7,101,18]
輸出:4
解釋:最長(zhǎng)遞增子序列是 [2,3,7,101]外永,因此長(zhǎng)度為 4 。
示例 2:
輸入:nums = [0,1,0,3,2,3]
輸出:4
示例 3:
輸入:nums = [7,7,7,7,7,7,7]
輸出:1
dp = [1]
n = len(nums)
for i in range(1,n):
temp = []
for j in range(i):
if nums[i]>nums[j]:
temp.append(dp[j])
dp.append(max(temp,default=0)+1)
return max(dp)
435.無(wú)重疊區(qū)間
給定一個(gè)區(qū)間的集合拧咳,找到需要移除區(qū)間的最小數(shù)量伯顶,使剩余區(qū)間互不重疊。
注意:
可以認(rèn)為區(qū)間的終點(diǎn)總是大于它的起點(diǎn)骆膝。
區(qū)間 [1,2] 和 [2,3] 的邊界相互“接觸”祭衩,但沒(méi)有相互重疊。
示例 1:
輸入: [ [1,2], [2,3], [3,4], [1,3] ]
輸出: 1
解釋: 移除 [1,3] 后阅签,剩下的區(qū)間沒(méi)有重疊掐暮。
示例 2:
輸入: [ [1,2], [1,2], [1,2] ]
輸出: 2
解釋: 你需要移除兩個(gè) [1,2] 來(lái)使剩下的區(qū)間沒(méi)有重疊。
示例 3:
輸入: [ [1,2], [2,3] ]
輸出: 0
解釋: 你不需要移除任何區(qū)間政钟,因?yàn)樗鼈円呀?jīng)是無(wú)重疊的了
if not intervals:
return 0
intervals.sort()
n = len(intervals)
f = [1]
for i in range(1, n):
tempList = []
for j in range(i):
if intervals[j][1] <= intervals[i][0]:
tempList.append(f[j])
f.append(max(tempList,default=0)+1)
return n - max(f)
貪心法
if not intervals:
return 0
intervals.sort(key=lambda x: x[1])
n = len(intervals)
# 比較右端點(diǎn)
right = intervals[0][1]
res = 1
for i in range(1, n):
if intervals[i][1] >= right:
res += 1
right = intervals[i][1]
return n - res