二分查找法
此文介绍了二分查找法
本文会随着作者日常学习进行补充及内容修正
- N*2 =》N<<1
- N*4 =》N<<2
- N/2 =》N>>1
- N*2+1 =》(N<<1)|1
+和-
比>>和<<
运算符优先级高
优先级 | 描述 | 运算符 | ||
---|---|---|---|---|
1 | 括号 | ()、[] | ||
2 | 正负号 | +、- | ||
3 | 自增自减,非 | ++、—、! | ||
4 | 乘除,取余 | *、/、% | ||
5 | 加减 | +、- | ||
6 | 移位运算 | <<、>>、>>> | ||
7 | 大小关系 | >、>=、<、<= | ||
8 | 相等关系 | ==、!= | ||
9 | 按位与 | & | ||
10 | 按位异或 | ^ | ||
11 | 按位或 | \ | ||
12 | 逻辑与 | && | ||
13 | 逻辑或 | \ | \ | |
14 | 条件运算 | ?: | ||
15 | 赋值运算 | =、+=、-=、*=、/=、%= | ||
16 | 位赋值运算 | &=、\ | =、<<=、>>=、>>>= |
1.找某个数是否存在
1 | public static boolean exist(int[] arr,int num){ |
2.找某个数的最左侧位置
例:112233445
查找>=2,最左则位置为第2个位置
第一轮
11223344
mid = 7 / 2 = 3 即数字2
2满足>=num的要求 R=3-1=2 ,即2
index=3
第二轮
112
23344mid =(2-0)/ 2 = 1 ,即数字1
1不满足 >= num L=1+1=2
第三轮
1
12 23344mid = (2- 2) / 2 = 0 ,即数字1
1不满足 >= num 的要求
最终返回index=3
1 | public static int nearestIndex(int[] arr,int num){ |
3.局部最小值
例:134324
其中1、2为局部最小值,下面只返回一个局部最小值
1 | public static int getLessIndex(int[] arr){ |