当前位置: 首页 > article >正文

特辣的海藻!7

特邀嘉宾:滑动窗口~
209. 长度最小的子数组 - 力扣(LeetCode)

 做过的题,再一次做,还是有问题。。。。我把它给解决掉!

超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时 超时

import java.lang.Math;
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length, minLen = n+1, sum = 0;
        int[] cnt = new int[n];
        for(int i = 0; i < n; i++) {
            int len = 1;
            sum = nums[i];
            for(int j = i + 1; j < n; j++) {
                
                if(sum >= target){
                    break;
                }
                else{
                    sum += nums[j];
                    len++;
                }
            }
            if(sum >= target)
                minLen = Math.min(len, minLen);
        }
        minLen = minLen == n+1 ? 0 : minLen;
        return minLen;
    }
}

没错但也不推荐 没错但也不推荐 没错但也不推荐 没错但也不推荐 没错但也不推荐 

class Solution {
    public int minSubArrayLen(int target, int[] nums) {

        int len = 0, sum = 0, j = 0, minLen = nums.length+1;
        for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                len++;
                while (sum >= target) {
                    minLen = Math.min(len, minLen);
                    sum -= nums[j];
                    j++;
                    len--;
                }
                
            }
         minLen = minLen == nums.length+1 ? 0 : minLen;
        return minLen;
    }
}

来! 看这个!! 来! 看这个!! 来! 看这个!! 来! 看这个!!  来! 看这个!!  

class Solution {
    public int minSubArrayLen(int target, int[] nums) {

        int sum = 0, j = 0, minLen = nums.length+1;
        for (int i = 0; i < nums.length; i++) {
                sum += nums[i];;
                while (sum >= target) {
                    minLen = Math.min(i-j+1, minLen);
                    sum -= nums[j];
                    j++;                   
                }
                
            }
         minLen = minLen == nums.length+1 ? 0 : minLen;
        return minLen;
    }
}

 这道题用暴力for循环超时,用滑动窗口的思路就是:当满足条件sum大于等于目标值就缩小窗口,寻找下一个可能的答案。

我觉得我当时是没有弄懂滑动窗口的核心要点

● 在外循环中扩展右边界,内循环中移动左边界

● 逐个扩展右边界,及时收缩左边界(才能覆盖所有子数组)

● 实时记录滑动窗口的长度,用窗口的端点 [j, i],即 j-i+1,而不是用一个变量

● 先记录长度,再移动指针更改左边界

我就是没有理解领会到到底应该怎样移动这个窗口,是要一个一个移动窗口,逐个元素的扩展有边界,而不是不满足状态时才移动,这样跳跃式移动会错过可能的答案。(比如数组中单个元素就是target值)。还有是用的变量记录数组长度,然后自以为的更新长度时没问题,先缩小窗口,再记录长度就出错。应该要先记录此时窗口的长度,再缩小窗口。

 1701. 平均等待时间 - 力扣(LeetCode)

 

 


http://www.kler.cn/a/568726.html

相关文章:

  • PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
  • 入门大模型的学习路线是什么?
  • 十一、Spring Boot:使用JWT实现用户认证深度解析
  • All in One: Multi-Task Prompting for Graph Neural Networks学习笔记
  • 【面试】Java面试频繁问到的题最新整理(附答案)
  • [Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
  • 火山引擎 DeepSeek R1 API 使用小白教程
  • 使用 ASP.NET Core 创建和下载 zip 文件
  • 剖析RabbitMQ消息可靠投递
  • 算法day4 dfs搜索2题
  • Flask-Restful
  • APP爬取:基于Appium的App数据爬取实战详解
  • 苹果产品自助网址
  • 【考试大纲】高级网络规划设计师考试大纲
  • 各章节详细总结与 Vue 学习收尾
  • Vscode 便用快捷键设置教程
  • 【赵渝强老师】Kafka消息的消费模式
  • 常用的api测试软件
  • 飞算JavaAI编程工具集成到idea中
  • 基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)