Skip to content

Latest commit

 

History

History
 
 

README.md

学习笔记 1.1 数组、链表、跳表

移动零元素问题

1. 双指针法

一个指针用来遍历数组中的所有元素,一个指针用来记录非0元素的位置(其实也可以理解成非0元素的个数)。

2. 滚雪球法 (也需要两个指针)

这里的雪球是指0元素的个数,当遍历到非0元素时(index = i),将其移动到下标为i-numOfZeros的位置,同时,将这个位置设置为0。

不管采用哪种方法,都需要考虑数组中一个元素的情况。
滚雪球法:要注意nums[i]要先被赋为0,然后再nums[i - numOfZeros] = nums[i]原本的值,如果顺序调换,则nums[i]原本值丢失直接变成0.
标准双指针法:在不想引入另外的空间存放值的时,要注意只有两个指针不重叠时,才能让num[i] = 0,要不然元素还会被0覆盖.



盛水容器问题

找到最大面积,在一无所知的情况下,先找到宽度最宽的情况,即left bar在最左边,right bar在最右边,然后比较左右两个bar的大小,大的留下,小的继续向下遍历。

int minHeight = height[i] < height[j]? height[i++] : height[j--];
使用这种方法不用分类讨论左 > 右 还是 右 > 左,是 左++ 还是 右--。比较简单。

反转链表问题