BOJ::部分和(no.1806)


質問する
10000以下の自然数からなる長さNの数列.この数列の連続数の部分と中の和がSより大きく、最短の長さを求めるプログラムを作成してください.
入力
第1行は、N(10≦N<100000)およびS(0しゅつりょく
1行目に要求される最小長さを出力します.そのような和をすることは不可能であれば、0を出力すればよい.
🤔 の意見を打診
これは
  • デュアルポインタを使用する典型的な問題です.
  • コメントブログ
    📌 説明する
    import sys
    input = sys.stdin.readline
    
    n,s = map(int, input().split())
    nums = tuple(map(int, input().split()))
    one, two = 0, 0
    ans = sys.maxsize
    res = 0
    
    while True:
        if res >= s:
            ans = min(ans, two-one)
            res -= nums[one]
            one += 1
        elif two == n:
            break
        else:
            res += nums[two]
            two += 1
        
    print(ans if ans != sys.maxsize else 0)