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

代码随想录算法训练营第二天| 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的矩阵还要注意边界变量的变化不能超出边界收缩的范围。

相关文章:

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

977. 有序数组的平方 题目链接&#xff1a;977. 有序数组的平方 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 刚开始看到题目第一反应就是平方之后进行排序&#xff0c;数据量在 1 0 4 10^4 104&#xff0c;可以使用O(nlogn)的排序。但是更好的方式是使用双指针&a…...

list stream 改变list属性的值

在Java中&#xff0c;如果你想使用Stream API来改变List中对象的某个属性值&#xff0c;需要注意的是&#xff0c;Stream API本身设计为不可变操作&#xff0c;即它不直接修改原有的集合&#xff0c;而是产生一个新的流或集合。但是&#xff0c;你可以通过流操作来创建一个新的…...

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…...

Java高级面试精粹:问题与解答集锦(二)

Java面试问题及答案 1. 什么是Java内存模型&#xff08;JMM&#xff09;&#xff1f;它的作用是什么&#xff1f; 答案&#xff1a; Java内存模型&#xff08;JMM&#xff09;定义了Java虚拟机&#xff08;JVM&#xff09;在计算机内存中的工作方式&#xff0c;包括程序计数器…...

基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)

基于机器学习模型预测信用卡潜在用户&#xff08;XGBoost、LightGBM和Random Forest&#xff09; 随着数据科学和机器学习的发展&#xff0c;越来越多的企业开始利用这些技术来提高运营效率。在这篇博客中&#xff0c;我将分享如何利用机器学习模型来预测信用卡的潜在客户。此…...

java 通过 microsoft graph 调用outlook(三)

这次会添加一个Reply接口&#xff0c; 并且使用6.10.0版本 直接上代码 一&#xff0c; POM <!-- office 365 --><dependency><groupId>com.microsoft.graph</groupId><artifactId>microsoft-graph</artifactId><version>6.1…...

QT--TCP网络通讯工具编写记录

QT–TCP网络通讯工具编写记录 文章目录 QT--TCP网络通讯工具编写记录前言演示如下&#xff1a;一、服务端项目文件&#xff1a;【1.1】server_tcp.h 服务端声明文件【1.2】thread_1.h 线程处理声明文件【1.3】main.cpp 执行源文件【1.4】server_tcp.cpp 服务端逻辑实现源文件【…...

如何解决爬虫的IP地址受限问题?

使用代理IP池、采用动态IP更换策略、设置合理的爬取时间间隔和模拟正常用户行为&#xff0c;是解决爬虫IP地址受限问题的主要策略。代理IP池是通过集合多个代理IP来分配爬虫任务&#xff0c;从而避免相同的IP地址对目标网站进行高频次访问&#xff0c;减少被目标网站封禁的风险…...

harmony 文件上传

图片上传 1&#xff0c; 获取文件&#xff0c;这里指的是图片 在鸿蒙内部有一个API pick选择器&#xff0c;实现文件保存和文件选择的功能&#xff0c; 使用pick对象创建PhotoViewPicker实例 传入必要的参数&#xff0c;如选择图片的数量&#xff0c;和弹出窗口的位置&#xf…...

什么是安全左移如何实现安全左移

文章目录 一、传统软件开发面临的安全挑战二、什么是安全左移四、安全左移与安全开发生命周期&#xff08;SDL&#xff09;三、安全左移对开发的挑战五、从DevOps到DevSecOps六、SDL与DevSecOps 一、传统软件开发面临的安全挑战 传统软件开发面临的安全挑战主要包括以下几个方…...

将PCD点云投影到BEV平面得到图片

前言 点云数据作为一种丰富的三维空间信息表达方式&#xff0c;通常用于自动驾驶、机器人导航和三维建模等领域。然而&#xff0c;点云数据的直观性不如二维图像&#xff0c;这限制了它在一些需要快速视觉反馈的应用场景中的使用。本文将探讨如何将点云数据转换为二维图像&…...

计算机笔记14(续20个)

230.色彩的种类就是色相 饱和度就是彩度除以明度 231.RISC是精简指令集&#xff0c;CISC是复杂指令集 232.世界上第一台数字计算机&#xff0c;奠定了至今仍在使用计算机体系结构 233.数据传输中&#xff0c;电路交换的传输延迟最小 234.定点整数的小数点约定在最低…...

docker 使用桥接网

在Docker中使用桥接网络&#xff0c;你可以创建一个新的桥接网络或者使用默认的桥接网络&#xff08;如果已经存在的话&#xff09;。以下是创建新桥接网络和连接容器到这个网络的示例命令&#xff1a; 1.创建一个新的桥接网络&#xff08;如果你想创建一个新的&#xff09;&a…...

1金融风控相关业务介绍

金融风控相关业务介绍 学习目标 知道常见信贷风险知道机器学习风控模型的优势知道信贷领域常用术语含义1 信贷&风控介绍 信贷业务,就是贷款业务,是商业银行和互联网金融公司最重要的资产业务和主要赢利手段 通过放款收回本金和利息,扣除成本后获得利润。贷款平台预测有…...

521源码-免费教程-经常用到的Vue.js的Vue@Cli入门指导

更多网站源码学习教程&#xff0c;请点击&#x1f449;-521源码-&#x1f448;获取最新资源&#xff1a;521源码-网站源码-资源素材-免费下载 Vue.js是一款流行的JavaScript框架&#xff0c;它使得构建交互式的Web界面变得简单和快捷。VueCli是Vue.js官方提供的脚手架工具&…...

大数据技术原理(二):搭建hadoop伪分布式集群这一篇就够了

&#xff08;实验一 搭建hadoop伪分布式&#xff09; -------------------------------------------------------------------------------------------------------------------------------- 一、实验目的 1.理解Hadoop伪分布式的安装过程 实验内容涉及Hadoop平台的搭建和…...

中间件是什么?信创中间件有哪些牌子?哪家好用?

当今社会&#xff0c;中间件的重要性日益凸显&#xff0c;尤其是在信创背景下&#xff0c;选择适合的中间件产品对于推动企业数字化转型和升级具有重要意义。今天我们就来聊聊中间件是什么&#xff1f;信创中间件有哪些牌子&#xff1f;哪家好用&#xff1f;仅供参考哈&#xf…...

python实现520表白图案

今天是520哦&#xff0c;作为程序员有必要通过自己的专业知识来向你的爱人表达下你的爱意。那么python中怎么实现绘制520表白图案呢&#xff1f;这里给出方法&#xff1a; 1、使用图形库&#xff08;如turtle&#xff09; 使用turtle模块&#xff0c;你可以绘制各种形状和图案…...

【Linux】-Flink分布式内存计算集群部署[21]

注意&#xff1a; 本节的操作&#xff0c;需要前置准备好Hadoop生态集群&#xff0c;请先部署好Hadoop环境 简介 Flink同spark一样&#xff0c;是一款分布式内存计算引擎&#xff0c;可以支撑海量数据的分布式计算 Flink在大数据体系同样是明星产品&#xff0c;作为新一代的…...

《python程序语言设计》2018版第5章第44题利用python循环进行十进制变十六进制,依然是44题的旧问题。倒着打出来的16进制

它似乎也有上一道题同样道问题。就是结果可能是倒着的。我还不能用超纲的办法。似乎上一个问题的难点又传到了下面 note: 我建立了一个method_a的变量干脆把整数除16的第一次放到循环外。 这样是不是可以解决呢&#xff1f; 我感觉还是在整除和除于的概念中&#xff0c;没有解脱…...

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(九)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 16 节&#xff09; P16《15.ArkUI-状态管理-任务统计案例》 1、实现任务进度卡片 怎么让进度条和进度展示文本堆叠展示&#xff1…...

海山数据库(He3DB)数据仓库发展历史与架构演进:(一)传统数仓

从1990年代Bill Inmon提出数据仓库概念后经过四十多的发展&#xff0c;经历了早期的PC时代、互联网时代、移动互联网时代再到当前的云计算时代&#xff0c;但是数据仓库的构建目标基本没有变化&#xff0c;都是为了支持企业或者用户的决策分析&#xff0c;包括运营报表、企业营…...

简单快捷的图片格式转换工具:认识webp2jpg-online

经常写博客或记笔记的朋友们可能会碰到图床不支持的图片格式或图片太大需要压缩的情况。通常&#xff0c;我们会在浏览器中搜索在线图片格式转换器&#xff0c;但这些转换器往往伴有烦人的广告或要求登录&#xff0c;并且支持的转换格式有限。最近&#xff0c;我在浏览 GitHub …...

iptablese防火墙【SNAT和DNAT】

目录 1.SNAT策略及应用 1.1SNAT原理与应用 1.2 SNAT策略的工作原理 1.3 实验操练 2.DNAT策略 2.1 DNAT策略的概述 2.2 DNAT原理与应用 2.3 实验操练 1.SNAT策略及应用 1.1SNAT原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xf…...

IT行业现状与未来趋势

随着技术的不断进步&#xff0c;IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链&#xff0c;这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是怎么样的&#xff1f;无论您是行业领袖、技术专家…...

Snowy2.x 版本使用 Yaml

代码&#xff1a;https://gitee.com/xiaonuobase/snowy/tree/Snowy2.5.2/ 直接将 properties 转换成 yaml 那么你大概率会遇到下面报错&#xff1a; 然后你上网搜索&#xff0c;发现是 snakeyaml 版本的问题&#xff0c;1.x 版本的 snakeyaml 有安全隐患&#xff0c;要升级到…...

鸿蒙 DevEcoStudio:通知栏通知实现

【使用notificationManager实现通知栏功能】 【普通通知、长文本通知、多行通知、图片通知】 import notificationManager from ohos.notificationManager import image from ohos.multimedia.image Entry Component struct Index {State message: string Hello World// 将图…...

什么是网关鉴权及其在Spring Cloud Gateway中的实现

在现代微服务架构中&#xff0c;网关扮演着非常重要的角色&#xff0c;它是系统和外部世界之间的入口&#xff0c;负责路由请求、流量控制以及安全保护等任务。其中&#xff0c;网关鉴权是保障系统安全的重要环节之一。本文将深入介绍什么是网关鉴权&#xff0c;以及如何通过过…...

【机器学习与实现】支持向量机SVM

目录 一、SVM (Support Vector Machine) 概述&#xff08;一&#xff09;支持向量机SVM的主要特点&#xff08;二&#xff09;支持向量与间隔最大化&#xff08;三&#xff09;线性可分/不可分&#xff08;四&#xff09;软间隔 (soft margin) 与核技巧 (kernel trick)&#xf…...

当代人工智能三教父——深度学习三巨头

文章目录 引言 人物介绍 突出贡献 专业名词解释 引言 今天下午闲来无事翻阅了一下csdn首页的头条文章——《27 岁天才创始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采访》 感觉挺有意思&#xff0c;就从头到尾的看了一遍&#xff0c;里面有很多…...