无标题
啰嗦
背景:以前学过理解过,相当于复习一遍。但很久没刷题了,忘得差不多
目的:通过代码随想录的网站速成算法,试水暑期实习
难度系数:4/5
目标:十天速成lc100
1. 数组、链表的复习
- 数组是连续的,增删只是障眼法,移动两下子,没真消失。
- 那二维数组?C++里是连续的。java不是,请看大屏幕

- 优雅的取中间
1
int middle = left + ((right - left) / 2)
- 边界问题:看区间存在不,区间存在就取=
- 错误案例1:删除元素,没有理解数组空间是连续的,假删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class Solution {
public int removeElement(int[] nums, int val) {
int size=nums.length;
for(int i=0;i<nums.length;i++)//数组长度不变的好吧,是size在变,判断ij要用size的
{
int f=nums[i];
if(f==val)
{
for(int j=i;j<nums.length-1;j++)//同理的
{
nums[j]=nums[j+1];
}
i--;
size--;
}
}
return size;
}
} - 优雅的数组删除:快慢指针。快指针找嗷嗷待哺的新家伙,慢指针是最终新数组。不等于val的时候,把快加入慢。等于val的时候,不加入慢,所以快继续跑。
- 滑动窗口:其实一直在移动左边界。
- https://leetcode.com/problems/minimum-size-subarray-sum/
做了三个题,走了。
25.2.21 23:00
滑动窗口
窗口内是什么?
如何移动窗口的起始位置?
如何移动窗口的结束位置?
lc 3
滑动窗口+哈希。
哈希记录的是字母最后出现的位置。遇到重复字符时,更新左边,
判断:如果发现当前元素哈希有值,说明出现过。我们取出这个值,如果大于等于start,说明出现在窗口内,要更新(原重复处+1)。如果小于,说明不在窗口内,不用更新左值。
由于滑动窗口是动态移动的,start 指针可能会移动到某个字符的上次出现位置之后。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yanjunbi's Blog!
