知识点
双指针
思路
维护两个指针,右指针表示枚举每一段的末尾,每次向后移动一位,左指针每次移动到合法的最左端即可,之后如果满足条件则更新答案。时间复杂度
AC Code(C++)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param target int整型 * @param nums int整型vector * @return int整型 */ int findMinSubarrayLength(int target, vector<int>& nums) { int n = nums.size(), res = 0x3f3f3f3f; int sum = 0; for (int i = 0, j = 0; i < n; i ++) { sum += nums[i]; while (j < i and sum - nums[j] >= target) { sum -= nums[j ++]; } if (sum >= target) res = min(res, i - j + 1); } return res == 0x3f3f3f3f ? 0 : res; } };