算法刷题1

1.插入排序
先用一个temp保存当前待插入的元素,然后用一个while循环移动p,循环条件中要判断p>=0,如果待插入的元素小于有序区的所有元素,p会移动的负数,让它0时再循环一次,出来的时候即可插入到对应的位置。
2.选择排序
3.堆排序
如果写实际下标那么就用i2+1<=length判断,判断是否还有右兄弟时:child+1<=length。传进去的参数需要swap后,要i-1。
如果写的不是实际下标,就用i2+1<length判断,判断是否是还有右兄弟时:child+1<length。
4.归并排序
5.lc3.最长无重复字符子串
pre始终记录当前重复的前一个重复字符的位置
abca....za
当遇到第一个a时,pre=-1,
2 a时,pre=1
3 a时,pre=3
在O(n)的寻找过程中,记下以当前字符结尾的最长为重复字符子串,pre是以k结尾往前的重复字符的重复字符的位置。
它是先取pre的值,然后再计算最长无重复子串,所以最后一个a可以计算到之前一个a的距离。当遇到z时由于和第2个a不相同,所以pre不更新。
pre的初始值是-1。
6.折半查找
可以写等号,因为最后找到同一个,mid也是同一个,如果a[mid]<a[h]》l=mid+1,如果a[mid]>[l]=》h=mid-1;
所以不管大于还是小于l和h都会不符合,while循环终止。
7.lc75颜色分类(荷兰国旗)
使用三个指针L、cur、R。
L=0,cur=0,R=arr.length-1;
L和R指向0区或2区的外的第一个待排元素。
while循环的终止条件是cur<=R;
当cur1,cur向右移动,
当arr[cur]0,放到0区中,cur++,L++。为什么可以直接交换?因为L指向的必定是1。如果L指向的0,它会在之前的交换中被放到0区了,并且移动,L什么时候停止移动?直到它是1的时候或2的时候L不交换,L停下来了,
也不可能是2,因为如果是2它会到2区,然后cur并没有右移,还会判断一次,循环一次刚才的逻辑。
8.lc15三数之和
i和用过的比的时候重复
9.

猜你喜欢

转载自www.cnblogs.com/kltsee/p/12587793.html