使用typescript解leetcode算法的经验

1.  {} > Set > Map

2.  js代码实现的运算 > Math函数 > 位运算

3.  时间复杂度 m层循环O(n的m次方) > 1层循环加不到1层循环O(n * log n) > 1层循环O(n) > 不到1层循环-2分法O(log n) > 位运算O(1)

4.  空间复杂度 递归、循环中定义变量O(n) > 不到1层循环中定义变量O(log n) > 在循环外定义变量O(1)

5.  如果对象的key不是很多,或者取对象值的深度不是很深,使用.或者[]取引用变量的属性值不会增加时间复杂度,并且会减少空间复杂度。

6.  如果能找到数学公式的规律,可以减少循环次数。

7.  掌握常见类型的算法,并把题目转换成对应类型的结构,如回溯、贪心、滑动窗口、背包、数列、动态规划

8.  for(let i=0;) 和 for(const x in nums) 速度差不多

9.  减少循环层级-break < 减少循环次数-break < 减少循环内执行代码 < 优化执行顺序

10. 使用typescript在leetcode上提交代码时的执行用时和消耗内存不是很准,可以自己在本地执行用例

11. i !== 999       慢于        i < 1000

12. i < 1000        等于        i <= 999

13. 二分查询    Math.floor(high + low + 1) / 2      慢于    Math.floor((high - low + 1) / 2) + low      差距5%

14. 速度上      i++     等于    ++i

15. while(node)     慢于        while(node !== null)

16. i--     慢于        i >>>= 1

17. i++     慢于        i <<= 1

18. bits >>= 1      等于        bits >>>= 1

19. String(Number(1000))        慢于        Number(1000).toString()

19. `${startNumber.toString()}-${endNumber.toString()}`         慢于        `${startNumber}-${endNumber}`       差距45倍

20. `${startNumber}-${endNumber}`       等于        startNumber + "-" + endNumber       耗时相同

21. const numsLength = nums.length; for(let i=0; i < numsLength; i++)       等于        for(let i=0; i < nums.length; i++)

22. [0]     慢于    new Array(n + 1).fill(0)    差距2.5倍

23. ["a", "e", "i", "o", "u"].includes(char)        慢于        "aeiou".includes(char)          差距1.8倍

24. vowels.includes(s[rightIndex])      等于        vowels.indexOf(s[leftIndex]) > -1

25. Math.sqrt(num)      非常快,时空复杂度与 CPU 支持的指令集相关,比一般循环的求解快100倍

26. 2的n次幂        慢于        n平方       慢于        n * logn        慢于        n           慢于        sqrt(n)         慢于        logn

27. 对象数组        慢于        字符串数组          慢于            单个字符数组

#### 参与贡献

1. 求一个数的二进制,可以用 (n & (n - 1)) === 0     或者    (n & (-n)) === n

const startTime = Date.now();
for (let i = 0; i < 100000000; i++) {
  titleToNumber("A"); //1
  titleToNumber("AB"); //28
  titleToNumber("AZ"); //52
  titleToNumber("ZY"); //701
  titleToNumber("FXSHRXW"); //2147483647
}

console.log(Date.now() - startTime);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值