算法
容易出现的坑
当出现 fast.next.next 这种形式的操作,一定要考虑fast.next 会不会为null
排序
选择排序
思想:
先确定一个最小值的位置,一般为数组开始位置,然后后一个位置跟这个最小值比较,如果后一个值更小,就认为后一个值为最小值的位置;否则,最小值位置保持不变。一轮循环就能找到最小值的位置,然后交换最小值跟当前数组的第一个数位置。
空间复杂度:只占用了几个变量,额外空间复杂度为O(1)
冒泡排序
思想:
N个数的数组,在0~N-1 的范围上,从数组开始比较,谁大谁往右移,即交换它们的位置。一直比较,直到最大的数被交换到数组的最右边。在0~N-2的范围上继续此过程,直到数组所有数都经过此过程。
异或运算
0 ^ N = N
N ^ N = 0
异或运算满足交换律和结合律
a ^ b = b ^ a
(a ^ b) ^ c = a ^ (b ^ c)