代码随想录算法训练营第二天| 977.有序数组的平方 、209.长度最小的子数组、 59.螺旋矩阵II

977. 有序数组的平方

在这里插入图片描述

题目链接:977. 有序数组的平方
文档讲解:代码随想录
状态:so easy

刚开始看到题目第一反应就是平方之后进行排序,数据量在 1 0 4 10^4 104,可以使用O(nlogn)的排序。但是更好的方式是使用双指针,详见题解。

题解

双指针题解:

public int[] sortedSquares(int[] nums) {
    // 初始化指向数组头和尾的指针
    int front = 0, rear = nums.length - 1;
    // 初始化结果数组的最后一个索引
    int index = nums.length - 1;
    // 创建一个与输入数组长度相同的结果数组
    int[] res = new int[nums.length];

    // 当头指针没有超过尾指针时,继续循环
    while (front <= rear) {
        // 比较头指针和尾指针指向的数的平方大小
        if (nums[front] * nums[front] > nums[rear] * nums[rear]) {
            // 如果头指针指向的数的平方较大,则将其放入结果数组的当前索引位置
            res[index] = nums[front] * nums[front];
            // 头指针向右移动一位
            front++;
        } else {
            // 如果尾指针指向的数的平方较大或相等,则将其放入结果数组的当前索引位置
            res[index] = nums[rear] * nums[rear];
            // 尾指针向左移动一位
            rear--;
        }
        // 将结果数组的索引向左移动一位
        index--;
    }

    // 返回排序后的平方数组
    return res;
}

209. 长度最小的子数组

在这里插入图片描述

题目链接:209. 长度最小的子数组
文档讲解:代码随想录
状态:so easy

思路:因为是连续子数组,所以可以考虑滑动窗口求和,然后左右放缩找满足条件的最小长度。

题解

双指针题解

public int minSubArrayLen(int target, int[] nums) {
    // 初始化当前子数组的和
    int sum = 0;
    // 初始化最小长度为一个很大的值
    int minLen = Integer.MAX_VALUE;
    // 初始化两个指针i和j,i为当前遍历到的数组位置,j为子数组的起始位置
    for (int i = 0, j = 0; i < nums.length; i++) {
        // 将当前元素加入到子数组的和中
        sum += nums[i];
        // 当子数组的和大于等于目标值时,执行下面的循环
        while (sum >= target) {
            // 更新最小长度为当前子数组的长度
            minLen = Math.min(minLen, i - j + 1);
            // 将子数组起始位置的元素从和中减去,然后将子数组的起始位置向右移动一位
            sum -= nums[j++];
        }
    }
    // 如果最小长度仍然为初始值,说明没有找到满足条件的子数组,返回0
    // 否则返回最小长度
    return minLen == Integer.MAX_VALUE ? 0 : minLen;
}

59. 螺旋矩阵 II

在这里插入图片描述

题目链接:59. 螺旋矩阵 II
文档讲解:代码随想录
状态:还行,刚开始卡了一小会儿。

思路:这个算法的目标是生成一个 n x n 的螺旋矩阵,其中矩阵元素按顺时针方向依次递增。我们可以利用四个边界变量(top、left、right、bottom)来逐步收缩矩阵的边界,并在每一步按顺时针方向填充矩阵。

题解

public int[][] generateMatrix(int n) {
    // 创建一个n x n的矩阵
    int[][] matrix = new int[n][n];
    // 初始化填入矩阵的数字
    int num = 1;
    // 初始化边界变量
    int top = 0, left = 0, right = n - 1, bottom = n - 1;

    // 当矩阵的上下边界和左右边界没有重叠时,继续填充矩阵
    while (top <= bottom && left <= right) {
        // 从左向右填充当前上边界所在行
        for (int i = left; i <= right; i++) {
            matrix[top][i] = num++;
        }
        // 上边界向下移动
        top++;
        // 从上到下填充当前右边界所在列
        for (int i = top; i <= bottom; i++) {
            matrix[i][right] = num++;
        }
        // 右边界向左移动
        right--;

        // 确保当前下边界在上边界下方,然后从右向左填充当前下边界所在行(如果是m*n的矩阵,这个不能少)
        if (top <= bottom) {
            for (int i = right; i >= left; i--) {
                matrix[bottom][i] = num++;
            }
            // 下边界向上移动
            bottom--;
        }

        // 确保当前左边界在右边界左方,然后从下到上填充当前左边界所在列
        if (left <= right) {
            for (int i = bottom; i >= top; i--) {
                matrix[i][left] = num++;
            }
            // 左边界向右移动
            left++;
        }
    }
    // 返回填充好的矩阵
    return matrix;
}

拓展

类似螺旋矩阵题的核心思路是利用边界变量来逐步收缩图形的边界。解题步骤如下:

  1. 初始化边界;
  2. 按要求进行模拟,最外层的while循环 控制边界收缩的范围,里面的for循环和边界变量的加加减减 模拟收缩过程 ;
  3. 边界控制,如果是m*n的矩阵还要注意边界变量的变化不能超出边界收缩的范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/635182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList与LinkedList

内存 内存缓存 预先将数据写到容器等数据存储单元中&#xff0c;就是软件内存缓存。 内存缓存淘汰机制 FIFO&#xff08;First in ,First Out&#xff09;&#xff08;先进先出&#xff09; LFU (Least Frequently Used) (频繁的最后淘汰) LRU(Least Recently Used) &#…

Socket同步通讯

目录 引言 1. 建立连接 2. 数据传输 3. 同步机制 4. 处理延迟 5. 安全性 6、一对一Socket同步通讯 客户端 代码分析 服务端 代码分析 7、服务端操作 1、首先我们先运行客户端代码 2、服务端点击Connect连接客户端 3、服务端输入信息传输到客户端 4、断开连接 引…

【笔记】软件架构师要点记录(1)

【笔记】软件架构师要点记录 20240517 20240517 连续性&#xff1a;恢复能力&#xff1b;可用性&#xff1a;保持稳定态的时长 增量开发模式&#xff1a;在增量开发中&#xff0c;每个增量都有明确的范围和功能&#xff0c;并按照特定的功能顺序完成。增量之间的范围划分在开发…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中&#xff0c;我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具&#xff0c;可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS&#xff0c;我们需要先安装它。…

腹部多器官分割的眼动引导双路径网络

文章目录 标题摘要方法实验结果 标题 摘要 这项研究提出了一种新的方法&#xff0c;名为眼动引导双路径网络&#xff08;Eye-Guided Dual-Path Network&#xff0c;EG-DPN&#xff09;&#xff0c;用于腹部多器官分割。这项工作的主要目标是提高医学影像分析中的多器官分割准…

express.js--token中间件验证及token解析(三)

主要作用 访问路由接口时&#xff0c;哪些需要校验token 通过token解析身份信息&#xff0c;就可以知道是哪个人 框架基本搭建express.js--基本用法及路由模块化(一)-CSDN博客 如何生成tokenexpress.js--生成token(二)-CSDN博客 middleware/index.js const jwt require(…

Vue 离线地图实现

效果图&#xff1a; 一、获取市的地图数据 DataV.geoAtlas 获取市地图数据 点击地图缩放至想要的市区域&#xff0c;通过右侧的链接打开网址&#xff0c;复制json数据。 二、获取镇地图数据 选择你想要的镇数据&#xff0c;点击下载 选择级别&#xff08;清晰度&#xff09…

如何搭建Sphinx文档

环境准备 Linux CentOS 7 方案 搭建一个文档网站&#xff0c;本文档使用的是tomcatsphinx。 Tomcat可以快速搭建出http服务&#xff0c;也可以使用apache httpd。 Sphinx作为文档网页自动生成工具&#xff0c;可以从reStructured文档转换为html文件。 Tomcat安装 创建/…

App玩转oCPX投放,打造低成本高转化的广告模型

随着广告主考核目标逐渐深化&#xff0c;以激活、注册等浅层指标为考核已经无法满足大部分广告主的投放诉求&#xff0c;越来越多的后端深化指标成为了广告主的核心诉求。OCPX应需而生&#xff0c;更好的助力广告主优化投放&#xff0c;全面提升转化效率。 在投放实践中&#…

【系统分析师】论文框架

文章目录 HA高可用集群软件1、需求分析2、架构设计3、技术选型&#xff1a;4、编码实现&#xff1a;5、测试验证&#xff1a;6、部署和运维&#xff1a; HA高可用集群软件 论文支持 文心一言查的 1、需求分析 明确业务需求&#xff0c;包括需要支持的用户数量、服务级别协议…

AI绘画Stable Diffusion制作文字光效指南,SD实现超炫文字光影效果!

大家好&#xff0c;我是小强 如果你经常刷短视频&#xff0c;那么你可能会在各大社交平台上见到了这样的文字光效&#xff0c;那么这种光线照射文字的效果是如何制作的呢&#xff1f; 这个教程将解密如何使用Stable Diffusion ControlNet来制作这种非常火的文字光效效果~&…

[Chapter 5]线程级并行,《计算机系统结构》,《计算机体系结构:量化研究方法》

文章目录 一、互连网络1.1 互连网络概述1.1 互连函数1.1.1 互连函数1.1.2 几种基本的互连函数1.1.2.1 恒等函数1.1.2.2 交换函数1.1.2.3 均匀洗牌函数1.1.2.4 碟式函数1.1.2.5 反位序函数1.1.2.6 移数函数1.1.2.7 PM2I函数 1.2 互连网络的结构参数与性能指标1.2.1 互连网络的结…

Terraria泰拉瑞亚服务器开服联机教程

1、进入控制面板 2、等待服务器安装 3、启动服务器 服务器启动成功后如下图所示 4、连接游戏服务器 4.1、复制服务器地址和端口 4.2、连接游戏服务器 5、预配置选项修改&#xff08;可选&#xff09; 6、更换游戏版本&#xff08;可选&#xff09; 服务器默认安装是最新稳定版…

民国漫画杂志《时代漫画》第18期.PDF

时代漫画18.PDF: https://url03.ctfile.com/f/1779803-1248612707-27e56b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

Miniconda安装教程——macos

一、安装 二、启用 三、安装包 四、删除旧版 一、安装 1、Miniconda安装 Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror Date倒序选择最新版&#xff0c;macos端下载pkg 点击安装&#xff0c;安装完成后&#xff0c;打开终端&a…

2024年信息素养大赛初赛成绩,你们查到了吗?

2024年全国青少年信息素养大赛初赛成绩已经发布&#xff0c;赶紧来查一下吧&#xff01;今年Scratch实验室预计晋级复赛分数在90分以上嘞&#xff08;最次也要85&#xff09;&#xff0c;今年的初赛题比较简单&#xff0c;大部分同学10多分钟就交卷了&#xff0c;之前发布了202…

视频图像识别技术常见开源算法模型及实践应用方案介绍

一、图像识别技术常见算法模型及数据集 人工智能图像识别技术是一种利用人工智能技术识别并理解图像内容的技术。它可以通过训练模型来识别和分类图像中的物体、场景和人脸等内容。 在人工智能图像识别技术中&#xff0c;常见的算法模型包括&#xff1a; 卷积神经网络&#x…

【iOS安全】BurpSuite iOS https抓包 | DNS Spoofing

BurpSuite 完整版安装 参考&#xff1a;Admin Team 小数智 的博客 下载 Burp Suite 2021.6 官网下载地址 https://portswigger.net/burp/releases &#xff08;下载并安装好&#xff09; jdk 使用的是11.0.10 https://www.oracle.com/java/technologies/javase-jdk11-downl…

react组件中的共享数据

在前面的示例中&#xff0c;每个 MyButton 都有自己独立的 count&#xff0c;当每个按钮被点击时&#xff0c;只有被点击按钮的 count 才会发生改变&#xff1a; 然而&#xff0c;你经常需要组件 共享数据并一起更新。 为了使得 MyButton 组件显示相同的 count 并一起更新&…

10 - 核心对象 Switch / case

简介 在Kettle&#xff08;也称为Pentaho Data Integration&#xff0c;PDI&#xff09;中&#xff0c;Switch/Case 是一个关键的组件&#xff0c;用于根据特定条件将数据流分支到不同的路径。Switch组件评估输入数据中的某个字段&#xff0c;并将数据标记后传递给相应的Case组…