算法学习笔记 2023/04/06

今天学习的内容是 长度最小的子数组 、有序数组的平方,和螺旋矩阵

首先是加深对双指针法运用的学习

1. 长度最小的子数组

自己想到的解法和暴力算法相似,复杂度为O(n2),不能通过。

学习解法:滑动窗口

使用双指针,一个指向子数组的起点,一个指向子数组的终点。当窗口内元素和大于target时,移动窗口。相当于对每一个可能的子数组终点 j,移动数组起点 i去寻找一个可能存在的最小子数组,但是相比暴力算法,子数组的起点和长度变成了数组终点的一个属性,从而降低了复杂度。

题例: 209 长度最小的子数组904 水果成篮

2. 有序数组的平方

暴力算法,将数组的每个元素的平方赋给原元素,再使用快速排序sort()函数,sort(nums.begain,nums.end)即可。复杂度为O(n+nlogn)

使用双指针法:建一个新的数组copy(nums.size(),0),长度与nums相同所有元素为0。双指针分别指向nums的数组头和尾。非递减排序指的是存在相等值的由小到大的排序,考虑负数的存在,只需要考虑头和尾元素绝对值的大小,在进行比较后将较大的值从尾到头,即正序从小到大的顺序赋给创建的数组copy,然后根据比较的结果移动指针。

题例: 977 有序数组的平方

3. 螺旋矩阵

首先什么是螺旋矩阵,简单举例

[[1, 2, 3]

 [8, 9, 4]

 [7, 6, 5]]

这样即是恰如其名的螺旋矩阵。

总的来讲,绘制矩阵总共有四个方向需要考虑。

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

此外还需要考虑在n为奇数时,矩阵存在一个需要赋值的中心点。

所以需要四个循坏和一个if语句来解决这个问题。

题例: 59 螺旋矩阵

这类题目重在考察对过程的理解,需要考虑的要素很多,有些难度需要加强练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值