元素和不小於目標值的最小子列表

2021-10-10 06:43:08 字數 1533 閱讀 2046

問題描述

給定乙個由n個整數組成的列表,和乙個目標值target,找到列表的乙個子列表,保證子列表中元素的和不小於給定的目標值,同時保證字列表的長度最小,返回該子列表的長度。如果不存在這樣乙個子列表則返回0。

測試樣例

# input: 

s =7

, nums =[2

,3,1

,2,4

,3]# output:

2# 子列表為[4,3],其長度為2

參考**

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

class

solution

:def

minsubarraylen

(self, nums, target)

: left =

0 right =-1

currentsum =

0 result =

len(nums)+1

while left <

len(nums)

:# 如果當前滑窗的和小於目標值,則增加滑窗範圍,即增加右側邊界。

# 如果當前滑窗和大於等於目標值,則減小滑窗範圍,即減小左側邊界。

if currentsum < target and right <

len(nums)-1

: right +=

1 currentsum += nums[right]

else

: currentsum -= nums[left]

left +=

1# 找到了乙個可能的視窗

if currentsum >= target:

result =

min(result, right - left +1)

if result ==

len(nums)+1

:return

0return result

# test program

# 7# 2 3 1 2 4 3

# target = int(input())

# nums = list(map(int, input().split()))

nums =[2

,3,1

,2,4

,3]target =

7result = solution(

).minsubarraylen(nums, target)

print

(result)

# 2# 子列表為 [4 ,3],其長度為 2

二分查詢 目標值的最小下標和目標值的最大下標

1.我們使用的退出迴圈的條件為l r 2.找到目標值的最小下標,將大於和等於合併成為一種情況 a mid target,答案的下標存在與l 如果只有乙個target值的話,l存的就是唯一target值的下標 3.找到目標值的最大下標,將小於和等於合併成為一種情況 a mid target,答案的下標...

子集和的目標值

題目描述 給定n個整數和目標值t,求某一非空子集使子集的元素的和與目標值之差的絕對值最小,元素可重複。輸入描述 第一行為整數n t。n為整數個數,t為目標值 第二行為n個整數ai。輸出描述 乙個整數,為差的最小值的絕對值。樣例輸入 5 91 1 1 4 17 樣例輸出 2 資料範圍及提示 1 n 1...

加起來和為目標值的組合

加起來和為目標值的組合 給出一組候選數和乙個目標數,找出候選數中起來和等於target的所有組合。每個數字在乙個組合中只能使用一次。組合中的數字要按遞增排序 結果中不能包含重複的組合 組合之間的排序按照索引從小到大依次比較,小的排在前面,如果索引相同的情況下數值相同,則比較下乙個索引 include...