問題描述
給定乙個由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...