代码随想录训练营第二天|LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
day2 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
创建时间: October 13, 2022 3:29 PM
一、今日任务
- 977.有序数组的平方
- 209.长度最小的子数组
- 59.螺旋矩阵II
二、具体实现
977.有序数组的平方
学习链接:
- 题目链接
- 文章讲解
- 视频讲解
思路:
这个题目是有可能出现负数的,不然出这个题目就没有意义了。题目给的数组顺序是非递减的,那么在将数组里的数据进行平方后,那么最大的数只能是数组的两边,中间不可能会是最大的。那么就可以使用双指针的方式来进行解答,数组两边的指针依次向中间进行移动,直到把数组给遍历完毕。
左右两边指针上的数同时进行平方,哪边指针的数平方后最大,就把它放入新数组的最后,最大数的指针向前移动一位,直到两边指针移动到同一个位置上时,结束循环。
class Solution {public int[] sortedSquares(int[] nums) {int left = 0;int right = nums.length - 1;int [] result = new int[nums.length];int index = nums.length - 1;while (left <= right) {if(nums[left] * nums[left] < nums[right] * nums[right]){result[index--] = nums[right] * nums[right];right--;}else{result[index--] = nums[left] * nums[left];left++;}}return result;}
}
209.长度最小的子数组
学习链接:
- 题目链接
- 文章链接
- 视频链接
思路:
因为题目要求的是找出一个符合条件的连续的子数组,那么就可以使用滑动窗口的方法来进行求解。
滑动窗口本质就是:不断的对滑动窗口的首指针和尾指针一直进行移动,把符合条件的窗口给筛选出来,其实也是双指针的思想,只不过这里的操作更像是对一个窗口进行滑动,所有叫滑动窗口。
因为这里的右指针需要将数组给遍历一遍,所有直接采用数组的长度,而左指针是从0开始。只要有连续的子数组相加符合条件,就进入子循环,每次都判断这个子数组的长度是否为最小,然后在将总和减去左指针的值,因为左指针要向前移动一位。
class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int sum = 0;int result = Integer.MAX_VALUE;for(int right = 0; right < nums.length; right++){sum += nums[right];while(sum >= target) {result = Math.min(result, right - left + 1);sum -= nums[left++];}}return result == Integer.MAX_VALUE ? 0 : result;}
}
59.螺旋矩阵II
学习链接:
- 题目链接
- 文章链接
- 视频链接
思路:
题目转圈的关键在于循环不变量,转的每一圈的所有边都遵循一个原则,是左开右闭还是左闭右开。
start
用来记录每一圈的初始位置,从这个初始位置开始进行转圈,offset
记录的是第几圈。
class Solution {public int[][] generateMatrix(int n) {int start = 0;int offset = 1;int count = 1;int loop = n / 2;int[][] nums = new int[n][n];while (loop-- > 0){int i = start;int j = start;for (j = start; j < n-offset; j++) {nums[start][j] = count++;}for(i = start; i < n-offset; i++){nums[i][j] = count++;}for(; j > start; j--){nums[i][j] = count++;}for(; i > start; i--) {nums[i][j] = count++;}start++;offset++;}if (n % 2 != 0){nums[n/2][n/2] = count;}return nums;}
}
三、今日收获
- 今天是学习的第二天,也算是把数组的几个基础题目给做完,希望在之后难度增加以后能继续坚持。
- 通过第一题和第二题,进一步的对双指针有了新的理解,双指针可以有很多种用法。
- 螺旋矩阵的关键再与循环不变量,每一圈的每一条边都必须遵守一个循坏的原则。
代码随想录训练营第二天|LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II相关推荐
- 随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]
977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 思路 递增数组,平方后最大值一定在最左侧或者最右侧,可想到– ...
- 977. 有序数组的平方|209. 长度最小的子数组|59. 螺旋矩阵 II
977. 有序数组的平方 原理 准备:双指针.一个空数组.双指针指向的两个元素作比较,更大的数平方之后,放入空数组的尾部空位. 图解 其实这题的指针有两种方法: 从两边向中间靠拢,得到的是由大到小的值 ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...
- 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...
- 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...
- Leonard代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
第一章数组 (今日任务) 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理 ...
- 【Leetcode数组--子数组--滑动窗口】209. 长度最小的子数组 904. 水果成篮 1004. 最大连续1的个数 III 76. 最小覆盖子串(有数组操作中重要的方法:滑动窗口!!!!)
文章目录 Leetcode209 1.问题描述 2.解决方案 解法一:两个错误思路的算法 解法二:暴力 解法三:滑动窗口法(O(n)) Leetcode904 1.问题描述 2.解决方案 Leetco ...
- 代码随想录算法训练营第二天|LeetCode977.有序数组的平方,209.长度最小的子数组, 59.螺旋矩阵II
题目连接:977.有序数组的平方 暴力法:将数组所有元素平方然后再排序(未利用题目条件:原始数组按照非降序排列) 双指针法:数组中各元素符号有三种情况:①所有元素非负(将数组中元素平方即可).②所有元 ...
- 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
目录 一.今日心得感悟 1.数组从小到大排序 ①冒泡法--时间复杂度:O(nlogn) ②使用排序函数qsort--时间复杂度:O(nlogn) ③两端->中间(双指针法) --时间复杂度:O( ...
最新文章
- LeetCode简单题之在区间范围内统计奇数数目
- AI落地虽千万难,智能语音往矣 | CCF-GAIR 2020
- php 自留地,重蔚自留地php基本语法-函数(附代码)
- WebService入门详解
- python开发stm32软件_ADB+Python+STM32 实现 微信跳一跳辅助
- MarshalHelper
- 计算机二级指针,C语言——二级指针
- Oracle使用小结
- java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
- JVM 新生代,老年代,永久代
- Python:内置类型
- 【笔记】Java如何判断是IDE启动还是jar启动
- GD32 NAND U盘
- html网页设计实训日志,网页制作实习日志
- 计算机重装后如何连接无线网络,电脑重装系统后无线网络连接不上怎么办
- MATLAB函数——fir1
- 解决Proteus仿真时候提示Could not load simulator DLL错误
- Science封面6连发:人类最完整的基因组测序完成!
- 如何多人共同编辑_微信编辑器可以多人协作排版吗?
- strcpy()的使用注意事项
热门文章
- Mysql语法系列—show full processlist介绍
- 桂林电子科技大学的计算机专业排名全,桂林电子科技大学优势专业排名,2021年桂林电子科技大学最好的专业排名...
- 2011年最新企业offer(待遇)比较(已知148家)
- 连接远程桌面提示:发生身份验证错误,要求的函数不受支持
- android8.0自适应图标,微软发布Edge浏览器最新版:支持安卓8.0自适应图标
- 【顺序表和单链表的比较】
- linux终端背景图片,ubuntu开关机背景颜色grub登录背景图片的修改
- ROS探索篇(三)基于turtlebot3实现SLAM建图及自主导航仿真
- 1688店铺所有商品API接口、店铺列表API接口
- 简单的单例模式其实不简单