有序数组的平方
题解:
本题的题意是要求数组中每个数字的平方组成的新数组,且是非递减的。我们知道,给定的数组是非递减的,数组中的数字是有正负之分的,正数是越往右越大,负数是越往左越小,但是其平方可不是这样的,也就是说最小的数的平方不一定比最大数的平方小,因此我们知道,数组中平方最大的数字一定是在数组的两端,所以此题采用双指针法,从数组的两端开始,比较两者之间数子平方的大小,大的数放到一个定义的新的数组result的最后,依次从后往前放。
代码:
长度最小的子数组
题解:
此题也可使用双指针方法,定义两个指针left, right,使用一层for循环用来遍历整个数组,也即移动右指针right,根据题意,我们在移动的过程中要计算right遍历过的数据之和,然后和目标值就行判断,再次看题,寻找的是长度最小的连续子数组,所以我们定义个存储这个长度的变量res,赋一个最大初始值;然后减去左指针指向的值,移动左指针,直到找到最小的连续子数组,此种处理方式形似移动窗口,所以叫滑动窗口
代码:
螺旋矩阵 ii
题解:
给定一个正整数n,生成一个包含1到n平方的所有元素,首先我们定义一个n * n的数组,定义一个初始坐标(startx, starty)= (0, 0),模拟的过程如下:
1.填充上行从左到右
2.填充右列从上到下
3.填充下行从右到左
4.填充左列从下到上
每次填充采用左闭右开的原则,我们最外层的遍历只需要遍历到数组的中间即可,遍历次数为n // 2,
形式1填充,从左到右,横坐标不变,纵坐标变,nums[startx][i]
形式2填充,从上到下,横坐标变,纵坐标不变,nums[i][n - offset]
形式3填充,从右到左,横坐标不变,纵坐标变,且是逆序遍历nums[n-offset][i]
形式4填充,从下到上,横坐标变,纵坐标不变,且是逆序遍历, nums[i][starty]
还要考虑一种场景:就是n为奇数的情形,然后给中心点给值
网友评论