思路
没什么思路。。。
看讲解之后
对暴力解法有了了解
通过两个for循环,第一个for循环 起始位置,第二个for循环 终止位置
然后寻找符合条件的子序列
滑动窗口(可以理解双指针法的一种)
含义:就是不断的调节子序列的起始位置和终止位置,从而得出我们想要的位置。
用一个for循环完成
这个for循环表示终止位置
窗口就是满足 其和>=target的长度最小的连续子数组
窗口的起始位置如何移动 :如果当前窗口的值大于s了,窗口就要向前移动了。
终止位置移动:for循环的索引
实现代码
/**
* @param {number} target
* @param {number[]} nums
* @return {number}
*/
var minSubArrayLen = function(target, nums) {
// 没啥思路。。。
// 看了题解之后,对暴力解法有一定的了解,也能理解
// 两个for循环 完成不断搜索区间的过程
// 从数组第一个数开始找符合条件的连续子数组 找到每个位置的 进行比较 最后得到结果
// 数组操作中的另一个重要方法 滑动窗口 用一个for循环完成不断搜索区间 理解为双指针的一种
// JS里的最大数怎么表示
let result = Infinity
let i = 0//起始位置
let j = 0//终止位置
let subLength = 0
let sum = 0
// 先找i=0时的 连续子数组的长度
for(j=0;j<nums.length;j++){
sum+=nums[j]
// 少了个= 题目要求=
while(sum>=target){
subLength = j-i+1//子数组长度
result=result<subLength?result:subLength
sum-=nums[i++]//移动起始位置,得把原来起始位置的值减掉
}
}
if(result!=Infinity)
return result
else
return 0
};
遇到的困难
JS中的最大数表示 Infinity
思路
没什么思路。。。
看讲解之后
能看懂,但自己想不到。。。
实现代码
遇到的困难
JS中的/ 它不会自动取整,得调用函数 或使用<<
还有 JS 二维数组的创建
new Array(n).fill(0)
// 怎么创建二维数组
let res = new Array(n).fill(0).map(()=>new Array(n).fill(0))
1数组map方法的作用 : 映射数组
array.map( function ( item, index, arr) {} )
map方法的返回值
返回映射之后的新数组
二维数组是一组共享相同名称的项目。二维数组是数组的数组,也就是说,创建一维数组对象的数组。它们以行和列的形式排列成矩阵。
JavaScript建议了一些创建二维数组的方法。
数组构造¶
您可以使用数组构造函数和for循环来创建2D数组,如下所示:
let arr = new Array(m); // create an empty array of length n
for (var i = 0; i < m; i++) {
arr[i] = new Array(n); // make each element an array
}
收获
对滑动窗口了解了一点,了解螺旋矩阵的题解