leetcode刷题(一)_数组类_5&6:数组的旋转、特定顺序遍历二维数组

本文介绍了LeetCode中的两组数组题目,包括189-旋转数组和396-旋转函数,重点讲解了旋转数组的思路,以及54-螺旋矩阵和59-螺旋矩阵II的解决方法,提到了使用direction数组来改变遍历方向的技巧。

数组的旋转、特定顺序遍历二维数组

涉及题目

  1. 数组的旋转
    189-旋转数组-中等396-旋转函数-中等
  2. 特定顺序遍历二维数组
    54-螺旋矩阵-中等59-螺旋矩阵II-中等498-对角线遍历-中等

总结

  1. 对于189,通过观察给出的用例,可以发现:向右移动k位,相当于数组元素逆序,从下标为k的位置分成左右两部分,分别再做一次逆序即可。另外,官方题解提到的环状替换也不失为一种方法。
  2. 396中,可以不对数组进行移动,而是通过移动与数组元素进行乘积的乘数,有一种错位相乘的感觉,如图:
    移动F函数乘数
    图中的i表示A数组的下标;n表示A数组的长度;每一个F乘数数组后面的式子,表示F函数的乘数与A数组元素下标之间的关系。
    比如:F(n-2)=(2+0)%5*A[0]+(2+1)%5*A[1]+(2+2)%5*A[2]+(2+3)%5*A[3]+(2+4)%5*A[4],时间复杂度是O(n)。
    当然,还有一种方法是利用公式计算:F(k+1) = F(k) + S - n * Bk[n-1]
  3. 对于54,可以使用模拟螺旋动作的方式,通过一个direction数组,去决定旋转的方向,从而将数组元素放入list中;也可以使用递归的方式,将外围一圈的数字加入list中,再将内围的数组看作一个新的矩阵,将其外围一圈的数字加入到list中;对于这种解法,需要注意边界问题
  4. 对于依据特定顺序进行遍历数组的题目,可以建立一个direction数组改变数组遍历方向。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值