type
status
date
slug
summary
tags
category
icon
password

学习小结:

例题一:

题目描述:

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的
子数组
,并返回其长度
如果不存在符合条件的子数组,返回
示例 1:
示例 2:
示例 3:

题解:

 

问题and重点

使用二分法的关键是了解两个问题

1、为什么要加sums[i]:

sums[r]−sums[l−1]≥target
变形得到:
sums[r]≥target+sums[l−1]

2、二分法为什么可以确保是这个字串:

此时根据上面的那个变形公式可以当作他是一个tarfet,这个就是我们想要找到的一个二分法的最左值,可以把他当作一个固定的l,此时通过二分法就是确保找到这个r,此时r和l配合相减就是我们想要的位置
 

解法二:

滑动窗口,这个也是我最开始想到的方法,但是最开始没有思考到怎么具体实现
 
通过这个题目。了解到千万不要只停留到死记算法模板,还需要理解思想,尤其是这些抽象地思维
两道题地思想都是先固定l,然后移动r,逐渐缩小区间长度
 
 
 
 
 
 
 

例题二:

题目描述

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。
请 不要使用除法,且在 O(n) 时间复杂度内完成此题。
示例 1:
示例 2:

题解:

 

问题and重点

双指针算法,就是难想
 
算法学习模板——最短路径10.25算法学习
Loading...