代码随想录打卡第二天-数组

学习目标:

  • 掌握数组相关算法

学习内容:

  1. 滑动窗口
  2. 前缀和
  3. 边界值把握

学习时间:

  • 2025-05-15周四晚上

学习产出:

  • 209.长度最小的子数组
解题思路

采用快慢指针方式,如果和大于目标值,计算当前长度,满指针+1,并循环判断移动后是否仍大于目标值,如果是则继续慢指针+1。z注意累计求和时要减去满指针当前值。如果小于目标值,则快指针+1,直至完成遍历。

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int fast=0;
        int slow=0;
        int curLength=Integer.MAX_VALUE;
        int length = nums.length;
        int result=0;
        while(fast<length) {
            result = result + nums[fast];
            while(result >= target) {
                curLength = (fast-slow +1) > curLength ? curLength:(fast-slow+1);
                result = result - nums[slow];
                slow++;
                
            }
            if(fast < length) {
                fast++;
            }

        }
        // 可修改为for循环
        return curLength == Integer.MAX_VALUE ? 0:curLength;
    }
}
  • 59.螺旋矩阵II
解题思路

本题思路混乱,陷入循环怪圈,看了卡哥思路才勉强参照解题
注意点:

  1. 处理每一条边要保证判断条件保持一致,即永远保持左闭右开
  2. 循环圈数,每一圈处理两条边,则循环圈数必定是n/2
  3. 当n为基数时,最后一个中间值即为n*n
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        // 起始点
        int startX=0;
        int startY=0;
        int offset = 1;
        int curNum = 1;
        int loop = 1;
        int i ,j;
        while (loop <= n/2) {
        for(j=startY;j<n-offset;j++){
            nums[startX][j] = curNum++;
        }
        for(i=startX;i<n-offset;i++) {
            nums[i][j] = curNum++;
        }
        for(;j>startY;j--){
            nums[i][j] = curNum++;
        }
        for(;i>startX;i--) {
            nums[i][startY] = curNum++;
        }
        loop++;
        startX++;
        startY++;
        offset++;
    }
    if (n % 2 ==1) {
        nums[startX][startY] = curNum;
    }
    return nums;
}
}
  • 58. 区间和
    初次学习前缀和算法,尚未开始解题,仅仅学习了思路。即算过的部分不需要再次计算,或许类似动态规划苏算法,待明日继续学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值