算法常用技巧

目录

交换两个数的异或方法:

2的n次方的移位算法

判断偶数:

计算中值的方法

master公式


交换两个数的异或方法:

注意:这种运算的前提是要交换的两个对象ab的地址不同

arr[a] = arr[a] ^ arr[b]
arr[b] = arr[a] ^ arr[b]
arr[a] = arr[a] ^ arr[b]

2的n次方的移位算法

2^n == 1<<n

(2^5) ==1<<5

判断偶数:

(newArr.length & 1) == 0

计算中值的方法

  • 普通的mid=(min+max)/2 这种会存在溢出的风险,比如数组长度开的过大,导致min+max超过了最大表示的值

  • 可以使用mid=min+(max-min)/2

  • 更高级的,可以采用移位运算,如mid=min+(max-min)>>1,这种操作运算更快

master公式

一系列子问题的规模都为等规模的递归行为的时间复杂度的估算

                                                          T(N) = a*T(N/b) + O(N^d)

  • T:表示问题的数据量

  • a:表示划分母问题后子问题的个数

  • b:表示分段的范围,通常分成两等份就是N/2,三分之二等分就是2/3*N,三等分就是1/3*N(注意,子问题规模一定是等分的,2/3等分法会有中间的1/3的部分重叠,如果子问题规模不是等分的则不能使用该公式)

  • O:其他运算的时间复杂度

    1)log(b,a)>d ->复杂度为O(N^log(b,a))

    2)log(b,a)=d ->复杂度为O(N^d*logN)

    3)log(b,a)<d ->复杂度为O(N^d)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值