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

977.有序数组的平方

这道题给出的原数组有两个特点:
1、由小到大
2、有负数有正数
因此,这个数组平方后的数应该是从两头向中间的0减小的,但是两头的大小需要我们用两个指针便历之后去判断大小。在遍历的同时left指针向右走,right指针向左走,每次判断left和right指针指向的平方数的大小,哪边大就将这个大的数放到新的数组中,注意:题目要求新数组由小到大排列,所以我们也要由最后往前面放平方数。 每次判断大小,如果是left指针的平方数大,left右移一位;如果是right指针的平方数大,right左移一位,直到right=left,为什么要等于?因为当right=left的时候,它们同时指向的这个平方数还没有被放到新数组里,因此要判断一次大小(当然是一样大的)再将这个数放到新的数组中。
可以举一个很简单的例子: 当原数组只有两个元素的时候,left=0,right=1,两个指针判断玩大小只会把一个指针指向的平方数放到新数组中,还有一个还没放,因此还需要再移动一下指针,再放一次。

class Solution {public int[] sortedSquares(int[] nums) {int left = 0;int right = nums.length - 1;int[] numsRes = new int[nums.length];int i = nums.length - 1;//这个i用来控制放入新数组的位置,无论是左右指针哪一个更新,i都需要--while(left <= right){//注意这里的等于也是有含义的,假设整个数组就两个数,那么left = right,也需要进行一次while循环if(nums[left]*nums[left] >= nums[right]*nums[right]){numsRes[i] = nums[left]*nums[left];i--;left++;}else{numsRes[i] = nums[right]*nums[right];i--;right--;}}return numsRes;}
}

59.螺旋矩阵||

在这里插入图片描述

这道题目根据题意,需要创建一个int[n][n]的数组,然后按照题目顺时针的顺序将[1,n**2]的数字放到这个数组中,所以关键在于确定每个数放置的位置的索引值,以控制数是顺时针放置在数组中的。
如图所示,我们放置的整体顺序是一圈一圈的,每个圈四个边,每个边有起始位置用start参数控制,每一圈中每个边遍历的个数不同,因此用offset控制,offset如图所示往里一圈+2,start如图所示往里一圈+1。
一共应该是(int)n/2圈,如果n是奇数的话最中间的是单独的一个元素,需要单独给值,我们最后判断一下n就行了,赋个值。

class Solution {public int[][] generateMatrix(int n) {int[][] res = new int[n][n];//存储结果数组int offset = 1;//控制不同圈每个边遍历的个数int start = 0;//控制不同圈每个边起始索引int num = 1;//控制要放入的值for(int i = 0;i < n/2;i++){//圈数for(int k = 0;k < n-offset;k++){//上边res[start][k+start] = num;//如图上边的x不变为start,y从start往后共遍历n-offset个元素num++;}for(int k = 0;k < n-offset;k++){//右边res[start+k][n-1-start] = num;//如图右边的y不变为n-1-start,x从start往后共遍历n-offset个num++;}for(int k = 0;k < n-offset;k++){//下边res[n-1-start][n-1-start-k] = num;//如图下边的x不变为n-1-start,y从n-1-start开始往前共遍历n-offset个,因此为减num++;}for(int k = 0;k < n-offset;k++){//左边res[n-1-start-k][start] = num;//如图左边的y不变为start,x从n-1-start开始往前遍历共遍历n-offset个,因此为减num++;}start++;//遍历完一圈start加一offset+=2;//遍历完一圈offset加2}if(n%2 == 1) res[n/2][n/2] = n*n;//n偶数的话正好遍历n/2圈,n为奇数的话最中间的这个元素需要单独赋值return res;}
}

209.长度最小的子数组

暴力解法

当然超出了时间限制,这里讲解一下思路:
定义两个指针left和right,初始化为0。left标定之后,right向后遍历,只要left或者right指针动一次,就计算[left,right]区间里的和sum。
如果sum>=target,left++以减少sum;
如果sum<target,right++以增加sum;
while()循环用right<nums.length条件控制,left永远小于right。
最后如果left0并且rightlength,说明整个数组的和都达不到target,返回0.

class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int right = 0;int res = nums.length;while(right < nums.length){int sum = 0;for(int i = left;i <= right;i++){sum += nums[i];}if(sum >= target){res = Math.min(res,right-left+1);left++;}else{right++;}}if(left == 0 && right == nums.length) return 0;return res;}
}

209.滑动窗口

这个方法需要两个指针i和j控制滑动窗口的头和尾,尾指针需要遍历整个数组,i指针用来当j指针滑动到符合条件的区间的尾的时候,调整区间的头从而缩小滑动窗口的区间以获得最小的区间。

class Solution {public int minSubArrayLen(int target, int[] nums) {int sum = 0;int i = 0;int res = nums.length;int total = 0;for(int j = 0;j < nums.length;j++){total += nums[j];sum+=nums[j];while(sum >= target){//当遇到符合条件的区间的时候,需要去持续缩小该区间的范围直到找到最短的符合条件的区间,所以这里用while不用ifres = Math.min(res,j-i+1);//每次缩小范围之后去获取一下这个最小范围的区间长度sum -= nums[i];//sum减去缩小的nums[i]的值i++;//头指针右移}}if(total < target) return 0;//在遍历的过程中,也同时获取到了整个数组的和,如果整个数组的和都小于target了,则说明该数组不存在满足条件的子数组,因此返回0.return res;}
}

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

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

相关文章

详谈 Java中的list.forEach()和list.stream().forEach() 异同点

涉及的文章链接&#xff1a;ArrayList 循环Remove遇到的坑 一、想总结本篇博客的原因 在日常开发中&#xff0c;需要对集合数据进行或多或少的赋值修改&#xff0c;那么循环赋值或者做一些处理就是最常见的一种操作了&#xff0c;但是用习惯了stream流&#xff0c;所以在循环的…

USST新生训练赛div2+div3题解

目录 前言题解部分B Ichihime and Triangle(800)题目大意题解代码实现 C Kana and Dragon Quest game(900)题目大意题解代码实现 J Squares and Cubes(800)题目大意题解代码实现 F Double Sort(1200)题目大意题解代码实现 I Minimize the Thickness(1100)题目大意题解代码实现 …

分布式事务解决方案(最终一致性【可靠消息解决方案】)

可靠消息最终一致性解决方案 可靠消息最终一致性分布式事务解决方案指的是事务的发起方执行完本地事务之后&#xff0c;发出一条消息&#xff0c;事务的参与方&#xff0c;也就是消息的消费者一定能够接收到这条消息并且处理完成&#xff0c;这个方案强调的是只要事务发起方将消…

自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割| 文献速递-深度学习肿瘤自动分割

Title 题目 Cascade multiscale residual attention CNNs with adaptive ROI for automatic brain tumor segmentation 自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割 01 文献速递介绍 脑肿瘤是大脑细胞异常和不受控制的增长&#xff0c;被认为是神经系统…

监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了

监控员工电脑的软件在市场上种类繁多&#xff0c;以下是几款备受好评的电脑监控软件&#xff0c;它们各自具有独特的功能和优势&#xff0c;选择前必须了解一下才能做成正确决定。 1.安企神&#xff1a; 这款软件支持7天试用测试&#xff0c;获取测试版请移驾 ↓↓↓ 安企神…

Transformer模型的简单学习

前言 Transformer 来源于一篇论文&#xff1a;Attention is all you need TRM在做一件什么事情呢&#xff1f;其实一开始它是被用于机器翻译的&#xff1a; 更详细的&#xff1a; 更详细的&#xff1a; 从上图可以看出&#xff0c;一个Encoders 下面包含了 n 个 Encoder&…

如何将 Langfuse 链接到自有 PostgreSQL 数据库并升级 PostgreSQL 版本

在本文中,我们将介绍如何将 Langfuse 应用程序链接到自有的 PostgreSQL 数据库,并升级 PostgreSQL 以支持 jsonb 类型。 前提条件 运行 CentOS 7 的服务器已安装的 PostgreSQL 9.2 或更低版本需要将 Langfuse 连接到自有数据库,并升级 PostgreSQL 以支持 jsonb 类型1. 将 La…

五款局域网监控软件良心推荐

五款局域网监控软件良心推荐 有人问我&#xff0c;能不能推荐几款好用的局域网监控软件。 我说&#xff0c;当然可以了&#xff0c;凭良心说&#xff0c;这几款软件在实用性、用户体验、隐私保护以及性价比上&#xff0c;绝对是当前最强监控软件。 1. 安企神 这款软件支持7天…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 &#xff08;1&#xff09;Composition API&#xff08;组合API&#xff09;&#xff1a; &#xff08;2&#xff09;新的内置组件&#xff1a; &#xff08;3&#xff09;其他改变&#xff1a; 二.创建vue…

Postman实现批量发送json请求

最近有一个场景&#xff0c;需要本地批量调用某个接口&#xff0c;从文件中读取每次请求的请求体&#xff0c;实现方法记录一下。 1.读取请求体 在 Postman 中&#xff0c;如果你想在 Pre-request Script 阶段读取文件内容&#xff0c;比如为了将文件内容作为请求的一部分发送…

聊天宝使用技巧揭秘让您快捷回复效率翻倍

聊天宝快捷回复软件&#xff0c;推出大量实用工具&#xff0c;帮助客服能更加高效的实现快捷发送&#xff0c;一键发送&#xff0c;效果翻倍&#xff01; ​ 前言 聊天宝作为一款快捷回复工具&#xff0c;让客服免去了打字回复之苦。所以很受广大客服欢迎&#xff0c;真是一旦…

什么是“SQL注入攻击”?如何预防和应对?

一、SQL注入攻击的概念 SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术&#xff0c;其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码&#xff0c;试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入&#xff0c;并将其直接拼接到SQ…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升&#xff0c;回收行业收到了大众的重视&#xff0c;行业快速发展。在互联网信息技术的支持下&#xff0c;“互联网废品回收”得到了发展&#xff0c;依靠各种技术搭建互联网回收平台&#xff0c;连接到居民与商家&#xff0c;让回收变得更加简单高效…

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

粉丝福利&#xff1a;微信搜索「万猫学社」&#xff0c;关注后回复「电子书」&#xff0c;免费获取12本Java必读技术书籍。 Nginx配置文件的简介 在浩瀚的互联网世界中&#xff0c;Nginx就如同一座大型交通枢纽&#xff0c;将访问者的请求精准地引导到正确的服务终点。而这一切…

【会议征稿,SPIE独立出版】第五届计算机视觉和数据挖掘国际学术会议(ICCVDM 2024)

第五届计算机视觉与数据挖掘国际学术会议&#xff08;ICCVDM 2024&#xff09;将于2024年7月19-21日在中国长春举行。此前&#xff0c;ICCVDM系列会议于2020年在中国西安、2021年在中国长沙&#xff08;线上&#xff09;、2022年在中国呼伦贝尔&#xff08;线上线下&#xff09…

基于微信小程序实现的【二手物品交易平台】后端 JAVA Springboot (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 基于微信小程序的二手物品交易平台 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信小程序技术其他相关技术&#xff1a; HTML, MyEclipse开发…

SQL——SELECT相关的题目(力扣难度等级:简单)

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表&#xff08;行转列&#xff09; 1280、学生参加各科测试的次数 1965、丢失信息的雇员 1068、产品销售分…

微信好友,如此的陌生,渐渐都成了只是人名!也许没有利益关系导致!

微信里一直聊天聊的挺好的朋友&#xff0c;不知怎么到后来却联系少了&#xff0c;最后渐渐的变成躺在微信备注里的一个陌生朋友&#xff01; 以前通过工作认识了一个朋友&#xff0c;初次见面的印象不是很深刻了&#xff0c;只记得当时给我的印象是对方很有礼貌&#xff0c;特别…

vue页面滚动条触底事件

html 滚动区域外层div添加属性 ref&#xff0c;id&#xff0c;scroll 在mounted函数中使用document设置监控div属性 在mathods中监控滚动事件

期货交易的雷区

一、做自己看不懂的行情做交易计划一样要做有把握的&#xff0c;倘若你在盘中找机会交易&#xff0c;做自己看不懂的行情&#xff0c;即便你做进去了&#xff0c;建仓时也不会那么肯定&#xff0c;自然而然持仓也不自信&#xff0c;有点盈利就想平仓&#xff0c;亏损又想扛单。…