1. 程式人生 > >和大於S的最小子陣列-LintCode

和大於S的最小子陣列-LintCode

給定一個由 n 個正整陣列成的陣列和一個正整數 s ,請找出該陣列中滿足其和 ≥ s 的最小長度子陣列。如果無解,則返回 -1。

樣例:
給定陣列 [2,3,1,2,4,3] 和 s = 7, 子陣列 [4,3] 是該條件下的最小長度子陣列。

挑戰 :
如果你已經完成了O(n)時間複雜度的程式設計,請再試試 O(n log n)時間複雜度。

#ifndef C406_H
#define C406_H
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    /*
    * @param nums: an array of integers
    * @param s: An integer
    * @return: an integer representing the minimum size of subarray
    */
int minimumSize(vector<int> nums, int s) { // write your code here if (nums.empty()) return -1; int num = INT_MAX; int start = 0, end = 0; int len = nums.size(); int sum = 0; while (end < len) { sum += nums[end]; if
(sum >= s) { num = minVal(num, end - start + 1); while (sum >= s&&start <= end) { num = minVal(num, end - start + 1); sum -= nums[start]; start++; } } end++; } return
num == INT_MAX ? -1 : num; } int minVal(int a, int b) { return a < b ? a : b; } }; #endif