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;}
}

三、今日收获

  1. 今天是学习的第二天,也算是把数组的几个基础题目给做完,希望在之后难度增加以后能继续坚持。
  2. 通过第一题和第二题,进一步的对双指针有了新的理解,双指针可以有很多种用法。
  3. 螺旋矩阵的关键再与循环不变量,每一圈的每一条边都必须遵守一个循坏的原则。

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

  1. 随想录一期 day2 [977.有序数组的平方|209. 长度最小的子数组|59.螺旋矩阵II(剥洋葱)]

    977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 思路 递增数组,平方后最大值一定在最左侧或者最右侧,可想到– ...

  2. 977. 有序数组的平方|209. 长度最小的子数组|59. 螺旋矩阵 II

    977. 有序数组的平方 原理 准备:双指针.一个空数组.双指针指向的两个元素作比较,更大的数平方之后,放入空数组的尾部空位. 图解 其实这题的指针有两种方法: 从两边向中间靠拢,得到的是由大到小的值 ...

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

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

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

    代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...

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

    代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...

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

    第一章数组 (今日任务) 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结 建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理 ...

  7. 【Leetcode数组--子数组--滑动窗口】209. 长度最小的子数组 904. 水果成篮 1004. 最大连续1的个数 III 76. 最小覆盖子串(有数组操作中重要的方法:滑动窗口!!!!)

    文章目录 Leetcode209 1.问题描述 2.解决方案 解法一:两个错误思路的算法 解法二:暴力 解法三:滑动窗口法(O(n)) Leetcode904 1.问题描述 2.解决方案 Leetco ...

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

    题目连接:977.有序数组的平方 暴力法:将数组所有元素平方然后再排序(未利用题目条件:原始数组按照非降序排列) 双指针法:数组中各元素符号有三种情况:①所有元素非负(将数组中元素平方即可).②所有元 ...

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

    目录 一.今日心得感悟 1.数组从小到大排序 ①冒泡法--时间复杂度:O(nlogn) ②使用排序函数qsort--时间复杂度:O(nlogn) ③两端->中间(双指针法) --时间复杂度:O( ...

最新文章

  1. LeetCode简单题之在区间范围内统计奇数数目
  2. AI落地虽千万难,智能语音往矣 | CCF-GAIR 2020
  3. php 自留地,重蔚自留地php基本语法-函数(附代码)
  4. WebService入门详解
  5. python开发stm32软件_ADB+Python+STM32 实现 微信跳一跳辅助
  6. MarshalHelper
  7. 计算机二级指针,C语言——二级指针
  8. Oracle使用小结
  9. java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
  10. JVM 新生代,老年代,永久代
  11. Python:内置类型
  12. 【笔记】Java如何判断是IDE启动还是jar启动
  13. GD32 NAND U盘
  14. html网页设计实训日志,网页制作实习日志
  15. 计算机重装后如何连接无线网络,电脑重装系统后无线网络连接不上怎么办
  16. MATLAB函数——fir1
  17. 解决Proteus仿真时候提示Could not load simulator DLL错误
  18. Science封面6连发:人类最完整的基因组测序完成!
  19. 如何多人共同编辑_微信编辑器可以多人协作排版吗?
  20. strcpy()的使用注意事项

热门文章

  1. Mysql语法系列—show full processlist介绍
  2. 桂林电子科技大学的计算机专业排名全,桂林电子科技大学优势专业排名,2021年桂林电子科技大学最好的专业排名...
  3. 2011年最新企业offer(待遇)比较(已知148家)
  4. 连接远程桌面提示:发生身份验证错误,要求的函数不受支持
  5. android8.0自适应图标,微软发布Edge浏览器最新版:支持安卓8.0自适应图标
  6. 【顺序表和单链表的比较】
  7. linux终端背景图片,ubuntu开关机背景颜色grub登录背景图片的修改
  8. ROS探索篇(三)基于turtlebot3实现SLAM建图及自主导航仿真
  9. 1688店铺所有商品API接口、店铺列表API接口
  10. 简单的单例模式其实不简单