单位网站建设目的,浙江建设网站首页,oa和erp系统区别,wordpress 4.7.1下载209.长度最小的子数组
题目链接#xff1a;长度最小的子数组 文档讲解#xff1a;代码随想录文章讲解 视频讲解#xff1a;代码随想录视频讲解 1.思路#xff1a;要获取的满足target的最小数组长度#xff0c;使用滑动窗口 1.定义左指针#xff0c;只有当满足条件的…209.长度最小的子数组
题目链接长度最小的子数组 文档讲解代码随想录文章讲解 视频讲解代码随想录视频讲解 1.思路要获取的满足target的最小数组长度使用滑动窗口 1.定义左指针只有当满足条件的时候才去移动左指针 2.定义总和sum0,minLength因为要取最小的,所以一开始设置成一个较大的值 3.遍历集合right充当右指针, sum nums[right] 4.满足条件的时候while循环 {计算当滑动窗口的大小移动左指针, sum-nums[left]} 2.代码
public int minSubArrayLen(int target, int[] nums) {int minLengthInteger.MAX_VALUE;//用于记录做左窗口int left0;//记录总的相加和int sum0;//充当右指针for (int i 0; i nums.length; i) {sum nums[i];//使用while因为会出现即使去掉左窗口后仍然比target大的情况//eg: [1 3 7 1 1] target7 left0 right2此时窗口内数据有1 3 7//去掉1后仍然大于目标值所以这里是需要while循环判断的while (sum target) {//记录当前数组的长度minLengthMath.min(minLength,i-left1);//减掉左窗口值sum-nums[left];//左窗口移动left;}}//当其Integer的最大值时说明没有满足条件的返回0return minLengthInteger.MAX_VALUE?0:minLength;} 59.螺旋矩阵II 题目链接螺旋矩阵II 文档讲解代码随想录文章讲解 视频讲解代码随想录视频讲解 1.思路 1.循环的次数,我们遍历一次是顺时针遍历从左到右从上到下从右到左从下到上这样一圈 一圈是2行总共是n行所以说需要遍历的次数是n/2 2.循环中变量的初始值和最终值,每次循环初始值都是递增的最终值要明确边界点的获取严格按照左闭右开[left,right) 3.循环中明确循数组中行和列哪一个在变化哪一个保持不变想不明白写一个二维数组 4.一圈结束后起始位置 startX,startY,圈数circle,边界值offset,下次循环时循环变量初始值是根据初始位置变化的,变量最终值是根据offset递减的 * 5.注意考虑到n是奇数的情况循环结束后还有一个中心元素的赋值 首先明确二维数组,n是偶数i\j j0 j1 j2 j3i0 [0][0] [0][1] [0][2] [0][3]i1 [1][0] [1][1] [1][2] [1][3]i2 [2][0] [2][1] [2][2] [2][3]i3 [3][0] [3][1] [3][2] [3][3]首先明确二维数组,n是奇数i\j j0 j1 j2i0 [0][0] [0][1] [0][2]i1 [1][0] [1][1] [1][2]i2 [2][0] [2][1] [2][2] 2.代码 public int[][] generateMatrix3(int n) {int[][] resnew int[n][n];//起始位置int startX0;int startY0;//记录每次遍历少遍历的数据个数int offset1;//当前循环的圈数int circle1;//数组存放的值int count1;int i ,j;//while (circlen/2){//从左往右遍历//1.j 的初始值不能写成0因为在第一次遍历的时候j0,但是在后续遍历时,j的初始值并不是0了而是随着startY变换的//eg 第一圈(0,0),第二圈(1,1)// j 的最终值,遵循作左闭又开原则,列(j)不能取到最右边的元素(以上面的二维数组为例0 1 2 )//2.数组中列(j)的值是一直在变化的,行(x)的值是固定的for ( j startY; j n-offset ; j) {res[startX][j]count;}//从上往下遍历//1.i的初始值需要跟着startX变,i的最终值,遵循左闭右开原则,行不能取到最下面的值(0 1 2 )//2.数列中行(i)是一直在递增的,列(j)是不变的从左往右遍历后的jfor ( i startX; i n-offset ; i) {//j是不变的上面循环的最后值res[i][j]count;}//从右向左遍历// j不用在定义初始值,j是由上次递增的结果开始递减的j的最终值遵循左闭右开原则不能取到startXfor ( ; j startX ; j--) {//x是不变的上面循环的最后值res[i][j]count;}//从下往上遍历// x不用定义初始值,x是由上次递增的结果开始递减的x的最终值遵循左闭右开原则不能取到startYfor (; istartY ; i--) {//j是不变的res[i][j]count;}//一层循环遍历结束startX;startY;offset;circle;}//当是奇数时中心位置还有一个元素需要对其进行赋值,// eg:n是奇数时(上面二维数组)遍历结束后中间位置[1,1]还没有被赋值if(n%21){res[startX][startY]count;}return res;}
误区一开始把数组的行和列的赋值和数学中的x轴和y轴抓混了以为行数据是0,0
(1,0),导致for循环赋值报错建议可以写一个例子 for循环的变量的起始值写成了0虽然第一次循环的时候是正确的但是在后续循环
中初始值是不对的
注这道题细节太多了后续需要重新刷1