文章目录
前言
今天只做了一道题,要慢慢找感觉了,每天多学一会儿。
一、今日刷题
第一部分:数组 – 第209题
跳转LeetCode
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
答案代码:
二、知识积累
1.双重for循环:
最开始想用暴力破解,但是思路想错了:打算先从子数组长度为1开始,即遍历整个nums看是否有单个元素满足 >= target,但从长度为2开始,每次遍历中的循环太多了,复杂度很高,要换一个思路。
双重循环外层循环设定子数组起点元素,内层循环起点元素后的所有元素不断加入子数组中,从而,在外层循环将所有元素遍历一次(即所有元素都做过起点)之后,就达到了暴力破解的目的,复杂度为O(n^2)。
注意双重for循环真正的思想,不要想偏了。
总结
今天回顾了双指针法,双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组和链表操作的面试题,都使用双指针法。