算法入门1-认识复杂度和位运算

一、认识复杂度

​   一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。
  时间复杂度是在一个算法流程中,常数操作量的一个指标。常用O(读作big O)来表示。

​  在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数。剩下的部分如果是f(N),那么时间复杂度就是O(f(N))。
​  简单来说,时间复杂度就是取最高项。
​  评价一个算法流程的好坏,先看时间复杂度,然后再分析不同数据样本下的实际运行时间。
 

二、位运算

​  计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算叫位运算。

1、“与” & :相当于生活中说的“并且”,就是两个条件都同时成立的情况下“与”的运算结果才为“真” 。

2、“或” | :相当于生活中的“或者”,当两个条件中有任一个条件满足,“或”的运算结果就为“真”。

3、”非“ ~ :就是指本来值的反。

4、“左移”:二进制位全部左移若干位,高位丢弃,低位补0。

5、“右移”:二进制位全部右移若干位,对无符号数,高位补0,有符号数,有的编译器补符号位,有的补0。

6、“异或” ^:异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”

​ 异或性质:
1)交换律 a ^ b = b ^ a
2)结合律 (a ^ b) ^ c = a ^ (b ^ c)
3)a ^ a = 0; a ^ 0 = a
4)a ^ b ^ b = a ^ 0=a

​  异或运用:

​  题目一:不用第三个变量,将两数交换。

​  解答:用异或的性质a ^ b ^ b = a ^ 0=a,可以完成。

​  代码实现:

public static void swap(Integer[] array, int i, int j) {
   
   
    if(array != null && i < array.length && j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值