leetcode笔记

心得

  • 在for里面加入if的全体退出判断要慎重。小概率的if退出,放在for循环结束后再判断,成本更低。

js

定义一个全为0的数组

let data = new Array(26)
for (let i = 0; i < 26; i++) {
  data[i] = 0
}
  • 规定大小能比直接令为[],少一些内存,虽然就0.1mb的样子

  • 用for循环来填充是最快的

sort()排序

nums.sort((a, b) => a - b);

sort()设计出来,就是为了字符串的排序。输入number会先转换为string,即25会大于100

sort()接受一个compareFunction(a, b),如果返回值小于0,那么a被排到b的前面;大于0则相反;等于0就不变。 因此从小到大的比较函数,可以写为(a, b)=> a-b,从大到小就可以是(a, b)=> b-a

数组第一层深拷贝

~~

有个更加简单的方法来取地板

就是前面加两个波浪号。就是两次按位非。

也不知道为啥,反正能把小数点都扔掉。

不仅如此,还能把字符串变成数字,如果不是数字还能变成0

image-20191029105822104

go

for循环

转换

int转string

int64转string

string转int

string转int64

排序

json序列化和反序列化

深拷贝

pop

python

排序

逆序for

一些算法

清除二进制位中最右边的1

如,统计二进制有多少个1

位运算判断奇偶

交换两个变量的值

两分法

mid = (left+right)>>1

即使left+right整型溢出,变成负数,无符号右移,能得到正数的正确结果。

mid另一种求法:

mid = left + (right-left)//2

或者用右移:

mid = left + ((right-left)>>1),记得要加括号,加减优先级比右移要高,不加要出问题。

异或

三项判断,如果知道不可能均为真/假,如何判断是两项为真,还是一项为真

用异或,把判断结果连起来

两项真,异或结果为假;一项真,异或结果为真

中序遍历

回溯

主要是,剩余路径+已经走过的路径

image-20191221095220049

Last updated

Was this helpful?