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

news2024/12/24 11:40:42

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的矩阵还要注意边界变量的变化不能超出边界收缩的范围。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试八股之什么是死锁

什么是死锁 死锁&#xff08;Deadlock&#xff09;是多线程编程中的一种常见问题&#xff0c;特别是在涉及到资源共享和同步的时候。具体来说&#xff0c;死锁是指两个或两个以上的线程在执行过程中&#xff0c;由于互相持有并等待对方释放的资源&#xff0c;而导致所有线程都…

Centos7.9上安装Oracle 11gR2 RAC 三节点(ASMlib管理asm磁盘)

服务器规划 OS 规格 主机名 IP VIP private IP scanip centos 7.9 1C4G racdb01 192.168.40.165 192.168.183.165 192.168.40.16 192.168.40.200 centos 7.9 1C4G racdb02 192.168.40.175 192.168.183.175 192.168.40.17 192.168.40.200 centos 7.9 1C4G…

php题解(巩固基础知识)代码审计

1.[NISACTF 2022]easyssrf 1&#xff09;进入环境后&#xff0c;他给了一个上url个文本框 2&#xff09;看了源码&#xff0c;没啥用&#xff0c;那就直接跟着它提示走&#xff0c;输入一个网址http://127.0.0.1/flag.php 3&#xff09;回显又给了/fl4g&#xff0c;直接file…

微服务:Ribbon负载均衡与加载时机修改

Ribbon 负载均衡 执行流程 负载均衡策略 调整负载均衡方案&#xff1a; 配置类中&#xff08;全局&#xff09;&#xff1a; // 负载均衡策略Beanpublic IRule randomRule() {return new RandomRule();}yaml配置 userservice: # 给某个微服务配置负载均衡规则&#xff…

【UE HTTP】“BlueprintHTTP Server - A Web Server for Unreal Engine”插件使用记录

1. 在商城中下载“BlueprintHTTP Server - A Web Server for Unreal Engine”插件 该插件的主要功能有如下3点&#xff1a; &#xff08;1&#xff09;监听客户端请求。 &#xff08;2&#xff09;可以将文件直接从Unreal Engine应用程序提供到Web。 &#xff08;3&#xff…

elementui中 表格使用树形数据且固定一列时展开子集移入时背景色不全问题

原来的效果 修改后实现效果 解决- 需要修改elementui的依赖包中lib/element-ui.common.js中的源码 将js中此处代码改完下面的代码 watch: {// dont trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/// update DOM manually. see https:/…

Oracle体系结构初探:数据库启动与停止

往期内容 参数管理 控制文件添加 启动 在启动Oracle数据库时&#xff0c;我们一般会使用如下命令&#xff1a; startup 虽然命令只有一个&#xff0c;但其中却是经历了3个阶段&#xff0c;从下面执行 startup 命令返回也可以看出来。 总结为3个阶段&#xff1a; nomount&…

【Unity2D 2022:Cinemachine】相机跟随与地图边界

一、导入Cinemachine工具包 1. 点击Window-Package Manager&#xff0c;进入包管理界面 2. 点击All&#xff0c;找到Cinemachine工具包&#xff0c;点击Install 二、相机跟随角色 1. 选中Main Camera&#xff0c;点击Component-Cinemachine-CinemachineBrain&#xff0c;新建…

【stm32/CubeMX、HAL库】嵌入式实验五:定时器(2)|PWM输出

参考&#xff1a; 【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p13&share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3 《嵌入式系统基础与实践》刘黎明等编著&#xff0c;第九章定时器&#xff0c…

亚洲AI核心资产,商汤科技!全球最优秀的医疗大模型平台——“大医”。

今天会给大家详解下商汤的AI产品“大医”。 —、什么是“大医”&#xff1f;&#xff08;行业模型&#xff09; “日日新.大医”是一款具备创新精神的医疗健康领域大语言模型。该模型通过内置的“场景集市”模块&#xff0c;提供了13个预设医疗场景的应用&#xff0c;同时还能…

Golang——reflect(反射)

反射是指在程序运行期间对程序本身进行访问和修改的能力。 一. 变量的内在机制 变量包含类型信息和值信息类型信息&#xff1a;是静态的元信息&#xff0c;是预先定义好的值信息&#xff1a;是程序运行过程中动态改变的 二. 反射的使用 reflect包封装了反射相关的方法获取类型…

冯喜运:5.23黄金市场风云变幻,黄金原油美盘趋势分析

【黄金消息面分析】&#xff1a;在经历了一段时期的强劲上涨后&#xff0c;黄金市场似乎迎来了调整期。北京时间周四(5月23日)&#xff0c;国际黄金价格连续第三个交易日下跌&#xff0c;目前交投在2365美元附近&#xff0c;较周一触及的纪录高点2449.89美元已下跌约4%。这一跌…

知识分享|非凸问题求解方法及代码示例【分类迭代】【大M法】

主要内容 之前发布了非线性问题线性化的几种方法&#xff0c;如知识分享|分段函数线性化及matlab测试&#xff0c;学习园地 | yalmip实用操作-线性化&#xff0c;非线性优化 | 非线性问题matlabyalmip求解案例&#xff0c;但是在实际建模及编程过程中&#xff0c;会遇到各种…

vue+canvas实现逐字手写效果

在pc端进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 <template><div class"container"…

【B站 heima】小兔鲜Vue3 项目学习笔记

系列文章目录 Day 01 目录 系列文章目录前言Day011.项目使用相关技术栈2. 项目规模和亮点3. Vue2和Vue3实现一个小案例4. vue3的优势5. create-vue脚手架工具6. 熟悉我们的项目目录和文件7. 组合式API-setup选项8. 组合式API-reactive和ref函数9. 组合式API-computed计算属性…

动态IP与静态IP有什么区别?如何选择?

动态IP和静态IP都是指网络设备&#xff08;如计算机、服务器、路由器等&#xff09;在互联网上分配的IP地址的类型。 一、什么是动态IP&#xff0c;什么是静态IP&#xff1f; 1、什么是动态IP&#xff1f; 动态IP是指由Internet服务提供商&#xff08;ISP&#xff09;动态分配…

xrdp多用户多控制界面远程控制

1、无桌面安装桌面&#xff08;原本有ubuntu桌面的可以直接跳过这一步&#xff09; Gnome 与 xfce 相比&#xff0c;xfce 由于其轻巧&#xff0c;它可以安装在低端台式机上。Xfce 优雅的外观&#xff0c;增强了用户体验&#xff0c;它对用户非常友好&#xff0c;性能优于其他桌…

docker- 购建服务镜像并启动

文章目录 前言docker- 购建服务镜像并启动1. 前期准备2. 构建镜像3. 运行容器4. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实…

扩散模型自动管道AutoPipeline

推荐&#xff1a;write_own_pipeline.ipynb - Colab (google.com) 为您的任务选择一个 AutoPipeline 首先选择一个检查点。例如&#xff0c;如果您对使用 runwayml/stable-diffusion-v1-5 检查点的文本到图像感兴趣&#xff0c;请使用 AutoPipelineForText2Image&#xff1a; f…

linux ping https是否连接

在Linux系统中&#xff0c;ping通常用于测试网络上另一台主机的可达性。它使用的是ICMP协议&#xff0c;这是一种设计用来处理网络通信问题的协议。HTTPS则是一种安全的网络传输协议&#xff0c;它使用SSL/TLS加密。 如果你想要测试到某个HTTPS服务器的连接&#xff0c;你可以使…