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

Day02:LeedCode977. 有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

 

详解:Day2:LeedCode977. 有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II-CSDN博客

977. 有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 已按 非递减顺序 排序

代码:

class Solution {public int[] sortedSquares(int[] nums) {int left=0;int right=nums.length-1;int[] result=new int[nums.length];int i=nums.length-1;while(left<=right){if(nums[left]*nums[left]<nums[right]*nums[right]){result[i]=nums[right]*nums[right];right--;}else{result[i]=nums[left]*nums[left];left++;}i--;}
return result;}
}

209. 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续

子数组

 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

思路:滑动窗口,

易错点:当sum小于target需要扩大窗口,这里需要考虑边界条件

当sum>=target需要缩小窗口,仅需要缩小边框左部,不需要缩小左边,放大右部,因为sum>target时可能只缩小左边框,使得sum==target

代码:

class Solution {public int minSubArrayLen(int target, int[] nums) {int left=0;int right=0;int result=Integer.MAX_VALUE;int sum=nums[0];while(left<nums.length&&right<nums.length){if(sum<target){right++;if(right<nums.length)sum+=nums[right];}else{result=Math.min(result,right-left+1);sum-=nums[left++];}}return result==Integer.MAX_VALUE?0:result;}
}

 


59. 螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 20

思路:填充时坚持左闭右开,即for循环判断不加等号,每填完一圈要重新确定起始出发点和新的边长,遇见n为奇数的要单独填中心方格

class Solution {public int[][] generateMatrix(int n) {int cycle=n/2;//控制有几个圈int flag=n%2;//判断是否剩中间那个int nums=1;//控制边长int start=0;//每圈开始的地方int i=0,j=0;//控制位置int[][] result=new int[n][n];int k=1;while(cycle>0){i=start;j=start;//从左往右for(;j<n-nums;j++){result[i][j]=k++;}//从上到下for(;i<n-nums;i++){result[i][j]=k++;}//从右到左
for(;j>start;j--){result[i][j]=k++;
}//从下到上
for(;i>start;i--){result[i][j]=k++;
}cycle--;nums++;start++;}if(flag==1){result[n/2][n/2]=n*n;}return result;}
}

相关文章:

  • 《Qt》使用Windeployqt发布程序
  • 【yolo 项目】
  • el-radio-group 选择一个,全部选中 解决方案
  • [蓝桥杯 2020 省 A1] 超级胶水
  • 顶顶通呼叫中心中间件-自动外呼输入分机号(比如隐私号)(mod_cti基于FreeSWITCH)
  • 信息泄露--注意点点
  • AI大模型应用开发实践:3.使用 tiktoken 计算 token 数量
  • SQL 面试系列(一)【留存率问题】
  • 【论文笔记】Attention is All You Need(NIPS’17)
  • 递增链表去重
  • 【WEEK13】 【DAY3】Shiro第三部分【中文版】
  • SSL证书制作及nginx部署
  • 局域网传文件怎么操作?轻松实现文件共享!
  • 用Python的PyAutoGUI库控制鼠标滚轮
  • 深度学习之基于TensorFlow人脸表情识别
  • 分享的文章《人生如棋》
  • @jsonView过滤属性
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Cookie 在前端中的实践
  • HTTP那些事
  • Laravel核心解读--Facades
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redis 懒删除(lazy free)简史
  • 第2章 网络文档
  • 动态魔术使用DBMS_SQL
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 深入浏览器事件循环的本质
  • 思维导图—你不知道的JavaScript中卷
  • 突破自己的技术思维
  • 我从编程教室毕业
  • 一个完整Java Web项目背后的密码
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Linux权限管理(week1_day5)--技术流ken
  • Prometheus VS InfluxDB
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #在 README.md 中生成项目目录结构
  • (c语言)strcpy函数用法
  • (二开)Flink 修改源码拓展 SQL 语法
  • (五)IO流之ByteArrayInput/OutputStream
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ****Linux下Mysql的安装和配置
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET Core 中的路径问题
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 的程序集加载上下文
  • .net反编译工具
  • .NET简谈设计模式之(单件模式)
  • .net专家(高海东的专栏)
  • @KafkaListener注解详解(一)| 常用参数详解