代码随想录DAY2|数组|Leetcode977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵Ⅱ

leetcode977.有序数组的平方

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/

文章链接:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html

视频链接:https://www.bilibili.com/video/BV1QB4y1D7ep

题目简述

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

涉及知识点

双指针

做题情况

1.不看视频和文章讲解,想到先平方,后使用冒泡排序,没做错,但是时间复杂度太高,leetcode不通过

2.使用双指针法,依然没通过,原因:根据昨天学的双指针法,惯性思维两个指针都是从左到右开始运行,但这道题应该两个指针从分别从两边到中间执行。

3.认真看了视频和讲解后,手写了一遍伪代码,终于通过

总结

1.sort(A.begin(),A.end())可以进行快速排序

2.这道题的思路是:新建一个数组new,对原数组nums两个指针从两边向中间遍历,比较指针所指元素平方后的大小,将更大的平方后的元素赋值给新数组new中最后一位k,(因为原数组nums存在正负数,平方后最大的值只可能存在最左和最右,次大值同理),k–,被取值的指针向中间挪动一位。

leetcode209.长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/

文章链接:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html

视频链接:https://www.bilibili.com/video/BV1tZ4y1q7XE

题目简述

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

涉及知识点

滑动窗口(其实感觉也像双指针)

做题情况

1.不会做,直接看了视频讲解再去做,出错,原因应给初始result赋值最大值,再与更新后的length进行比较,谁小取谁。不小心给result赋值了0。

return result == INT32_MAX ? 0 : result;

结尾这句也没写对。

2.编译通过

总结

1.这道题使用两个指针,两个指针中间的部分即为窗口,使用一个for循环,for循环内部移动的指针应该指向的是窗口的结束位置,否则会陷入两个for的解题思路。

2.两个指针i,j初始值为0,j++进行移动,如果i~j之间的数加起来和超过了target,则看是否能缩小这个集合的长度,将i也向右移动,同时在sum中减去i移动前的指向元素。一旦sum小于target了,将j指针向右移动。

3.用length记录当前符合条件的子集长度,用result更新最小长度。

leetcode59.螺旋矩阵Ⅱ

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/

文章链接:https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html

视频链接:https://www.bilibili.com/video/BV1SL4y1N7mV/

题目简述

给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

做题情况

1.知道自己不会做,先看了视频,手写了一遍代码,然后再自己敲了一遍。第一次运行失败,忘记在while里赋值i=starty,j=startx了,导致测试用例里的内层赋值都是错的

2.第二遍编译成功

总结

1.这道题看着挺吓人,但其实实际做的时候考虑好也没有很难。遵循一个左闭右开的循环不变量,在for弄不清楚最大值多少的时候可以代入值算一下。

2.注意startx,starty,offset,loop的作用,loop表示几个圈,(startx,starty)表示圈最开始的坐标,每循环一圈自加1,offset是运行到底角的时候减去的边界值。startx=starty=offset

3.注意n为奇数时最中间那个数要单独赋值。

你可能感兴趣的:(c++刷题打卡,算法,数据结构)