代码随想录DAY2|有序数组的平方|长度最小的子数组|螺旋矩阵II

有序数组的平方

有序数组的平方

解题思路

最优的解法是通过双指针,由于该数组是一个非递减数列,我们只需要将数组的首尾两端作为两个指针的起始位置,然后进行比较就行。具体地讲,双指针所指向的值相互比较,把较大的值放入新的数组的开通,然后该指针往前(如果是在首端的指针,则往后)。重复这个过程直到双指针重合,别忘了重合的时候把指针指向的值放入数组。

知识点

双指针

心得

一开始做这道题的时候没看清是有序非递减数列,直接用暴力法解决。以后当遇到这种有序的比大小的题,可以尝试用双指针进行处理。

长度最小的子数组

长度最小的子数组

解题思路

使用滑动窗口来解决,这个是用了一个非常巧妙的方法,由于我们要找一个长度最小的子数组,我们只需要控制两个指针作为一个窗口的头和尾,然后通过窗口内所有值的和与目标值进行比较来移动两个窗口,最后得到子数组。如果窗口内所有值的和大于目标值,则头指针移动,而尾指针保持每次往右移动一格即可。

知识点

滑动窗口,双指针

心得

这个题目有想到用双指针,但是没有捋清楚中间的逻辑。看了题解之后才知道具体该怎么写。

螺旋矩阵II

螺旋矩阵II

解题思路

题目中的螺旋矩阵是有规律的,重点的是每次矩阵转向的时候的下标需要确定,你会发现除了第一次转向时的下标和矩阵的维数n相同,每两次数组转向的时候,当前转向的下标和下次转向时的下标的距离会少1。举个例子,一个3维矩阵,它第一次转向的时候的下标为2(0,1,2,有三个),第二次转向时候的下标为4(3,4,有两个),第三次转向的时候下标为6(5,6,有两个),第四次转向的时候下标为7(一个),第五次转向的时候下标为8(一个)。所以我在一个循环内解决了这个问题。

知识点

数组,矩阵

心得

找出逻辑后,难点就在于实现了,废了我一个小时修好了bug。

总计时长 5h

posted @ 2024-06-23 19:47  不进育碧不改名  阅读(798)  评论(0编辑  收藏  举报