【复习】代码随想录算法训练营第二天|数组part02

8.7 周一

【没做出】977有序数组的平方

题目:

将非递减数组平方后,仍按非递减顺序排列

题解:

1、平方后,较大的数在两端,较小的在中间。所以定义左右两个指针,由两端向中间移动

2、将左右指针指向的数中较大的放入结果数组(从后往前放)

【没做出】209长度最小的子数组

题目:求长度最小的和大于等于target的子数组

题解:

1、滑动窗口法,遍历数组,i为窗口的结束位置

2、在遍历过程中,如果sum>=target了,就是缩小窗口,left++,同时记录子数组长度。

3、注意,缩小窗口是一个循环的过程,使用while。

新知识点:

Integer.MAX_VALUE

相关题目:

  • 904.水果成篮(opens new window)

题解:好难。

1、首先理解题意,fruits[i]表示第i课树上的水果种类编码(比如1代表是苹果,2代表是桃子)。所以这道题就是求最多包含两种数(两种水果)的最长子序列

2、使用滑动窗口法,但是这题和上一题的第一个不同点是:

上题在满足条件时缩小窗口,在while里记录result;本题是在不满足条件时缩小窗口,在while外记录条件。

3、本题使用哈希表来记录水果种类。

新知识(哈希表):

创建:HashMap map = new HashMap()

插入:map.put(key,value)

更新value的值:

map.put(fruits[right], map.getOrDefault(fruits[right], 0)+1);(标红的函数表示返回value,如果没找到就返回给定值)

返还value:map.get(key)

删除:map.remove(key)

  • 76.最小覆盖子串(opens new window)

题解:难死了

59螺旋矩阵

曾经的笔试题里出现过。看到题目完全没想法,写的时候脑子一定要清醒,细节很多。

你可能感兴趣的:(算法,矩阵,线性代数)