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

代码随想录打卡Day 长度最小的子数组209 螺旋矩阵2 59

day02 数组

1 长度最小的子数组

介绍数组操作中另一个重要的方法:滑动窗口

所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果

在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。

那么滑动窗口如何用一个for循环来完成这个操作呢。

首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。

如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?

此时难免再次陷入 暴力解法的怪圈。

所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。

那么问题来了, 滑动窗口的起始位置如何移动呢?

这里还是以题目中的示例来举例,s=7, 数组是 2,3,1,2,4,3,来看一下查找的过程:

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0, right = 0, sum = 0, minLen = Integer.MAX_VALUE;

        while (right < nums.length) {
            sum += nums[right];
            while (sum >= target) {
                minLen = Math.min(minLen, right - left + 1);
                sum -= nums[left];
                left++;
            }
            right++;
        }
        return minLen == Integer.MAX_VALUE ? 0 : minLen;

    }
}
//leetcode submit region end(Prohibit modification and deletion)

2 螺旋数组59

package com.jiangxun.leetcode.editor.cn;//<p>给你一个正整数&nbsp;<code>n</code> ,生成一个包含 <code>1</code> 到&nbsp;<code>n<sup>2</sup></code>&nbsp;所有元素,且元素按顺时针顺序螺旋排列的&nbsp;<code>n x n</code> 正方形矩阵 <code>matrix</code> 。</p>
//
//<p>&nbsp;</p>
//
//<p><strong>示例 1:</strong></p> 
//<img alt="" src="https://assets.leetcode.com/uploads/2020/11/13/spiraln.jpg" style="width: 242px; height: 242px;" /> 
//<pre>
//<strong>输入:</strong>n = 3
//<strong>输出:</strong>[[1,2,3],[8,9,4],[7,6,5]]
//</pre>
//
//<p><strong>示例 2:</strong></p>
//
//<pre>
//<strong>输入:</strong>n = 1
//<strong>输出:</strong>[[1]]
//</pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示:</strong></p>
//
//<ul> 
// <li><code>1 &lt;= n &lt;= 20</code></li> 
//</ul>
//
//<div><div>Related Topics</div><div><li>数组</li><li>矩阵</li><li>模拟</li></div></div><br><div><li>👍 1340</li><li>👎 0</li></div>

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        //从1开始放数字
        int number = 1;
        //循环次数count
        int count = 1;
        //起点(x,y),i是行,j是列
        int startX = 0;
        int startY = 0;
        int i=1;
        int j=1;
        //初始化偏移值设为 1,固定某一循环,每一次填充数量
        int offset = 1;

        /**
         * 3*3的矩阵
         * 第一次填充上部 1 2,第二次填充右侧 3 4 左闭右开
         * 第三次填充下部 5 6,第四次填充左部 7 8
         * (以此循环)填充 9
         */
        while (count <= n / 2) {
            //上
            for (j = startY; j < n - offset; j++) {
                nums[i][j] = number++;
            }
            //右
            for (i = startX; i < n - offset; i++) {
                nums[i][j] = number++;
            }
            //下
            for(; j > startY; j--){
                nums[i][j] = number++;
            }
            //左
            for(; i > startX; i--){
                nums[i][j] = number++;
            }
            //更新起点
            startX++;
            startY++;
            //更新偏移值
            offset++;
            //更新循环次数
            count++;

        }
        //如果n是奇数,单独处理中间数字
        if(n % 2 == 1){
            nums[startX][startY] = number;
        }
        return nums;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

package com.jiangxun.leetcode.editor.cn;//<p>给你一个正整数&nbsp;<code>n</code> ,生成一个包含 <code>1</code> 到&nbsp;<code>n<sup>2</sup></code>&nbsp;所有元素,且元素按顺时针顺序螺旋排列的&nbsp;<code>n x n</code> 正方形矩阵 <code>matrix</code> 。</p>
//
//<p>&nbsp;</p>
//
//<p><strong>示例 1:</strong></p> 
//<img alt="" src="https://assets.leetcode.com/uploads/2020/11/13/spiraln.jpg" style="width: 242px; height: 242px;" /> 
//<pre>
//<strong>输入:</strong>n = 3
//<strong>输出:</strong>[[1,2,3],[8,9,4],[7,6,5]]
//</pre>
//
//<p><strong>示例 2:</strong></p>
//
//<pre>
//<strong>输入:</strong>n = 1
//<strong>输出:</strong>[[1]]
//</pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示:</strong></p>
//
//<ul> 
// <li><code>1 &lt;= n &lt;= 20</code></li> 
//</ul>
//
//<div><div>Related Topics</div><div><li>数组</li><li>矩阵</li><li>模拟</li></div></div><br><div><li>👍 1340</li><li>👎 0</li></div>

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        //从1开始放数字
        int number = 1;
        //循环次数count
        int count = 1;
        //起点(x,y),i是行,j是列
        int startX = 0;
        int startY = 0;
        int i=1;
        int j=1;
        //初始化偏移值设为 1,固定某一循环,每一次填充数量
        int offset = 1;

        /**
         * 3*3的矩阵
         * 第一次填充上部 1 2,第二次填充右侧 3 4 左闭右开
         * 第三次填充下部 5 6,第四次填充左部 7 8
         * (以此循环)填充 9
         */
        while (count <= n / 2) {
            //上
            for (j = startY; j < n - offset; j++) {
                i=startX;
                nums[i][j] = number++;
            }
            //右
            for (i = startX; i < n - offset; i++) {
                nums[i][j] = number++;
            }
            //下
            for(; j > startY; j--){
                nums[i][j] = number++;
            }
            //左
            for(; i > startX; i--){
                nums[i][j] = number++;
            }
            //更新起点
            startX++;
            startY++;
            //更新偏移值
            offset++;
            //更新循环次数
            count++;

        }
        //如果n是奇数,单独处理中间数字
        if(n % 2 == 1){
            nums[startX][startY] = number;
        }
        return nums;
    }
}
//leetcode submit region end(Prohibit modification and deletion)


http://www.kler.cn/news/353194.html

相关文章:

  • 在示波器里面外触发输入通道(EXT TRIG)什么作用?
  • 亚信安全DeepSecurity中标知名寿险机构云主机安全项目
  • 使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程
  • Golang | Leetcode Golang题解之第497题非重叠矩形中的随机点
  • 最好的ppt模板网站是哪个?做PPT不可错过的18个网站!
  • git取消被跟踪的文件并忽略
  • JavaWeb环境下Spring Boot在线考试系统的优化策略
  • Prometheus运维监控平台之服务发现配置、标签及监控规则编写(二)
  • 【Redis】CentOS 7 环境搭建 redis 最新版 7.4 分布式集群完整版详解
  • YOLO11改进 | 注意力机制 | 添加GAM注意力机制 【完整代码】
  • Frequency-Adaptive Dilated Convolution for Semantic Segmentation
  • 大数据面试题整理——Yarn
  • 【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】
  • 浏览器安装Vue开发者工具
  • 面向对象编程关系:组合Composition和聚合Aggregation
  • 吴恩达深度学习笔记(5)
  • 前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
  • 如何在UE5中创建加载屏幕(开场动画)?
  • mac上docker desktop 服务指南
  • 【C++刷题】力扣-#163-缺失的区间
  • 拟声 0.37.0 | 拟物风格,超级优美,功能丰富
  • 机器学习——解释性AI
  • java脚手架系列4--测试用例、拦截器
  • AI 驱动的测试用例生成:实现全量覆盖
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(无习题)
  • 基于web的酒店客房管理系统【附源码】