153. 寻找旋转排序数组中的最小值
理论在考查二分查找的办法
补充常识
double 转 int,是间接舍去小数。
负数:
向上取整或者向下取整或四舍五入
Math.ceil(),Math.floor(),Math.round()
思路:
旋转后的数列会呈现以下两种状况:
- while循环只能抉择Left和Right的起因
判断条件只能选p和Right的起因(红框为条件,蓝框为抉择后果)
- p>R,只有pR这一种抉择;
- p<R,有这两种状况,判断后的操作都是抉择互补段Lp
- 而对于p>L,有两种状况,判断后的操作第一个选pR段,第二个选Lp段,无奈辨别
- p<L只有一种Lp状况。
抉择好某一段,应该是L = p + 1,而不是R = R - 1 的起因
- p>R,p必然在最大值及往前,所以L=p+1,要么nums[p+1]=最小值,要么在最小值往前。选pR段,R不变。
- p<R,p必然在最小值及往后,所以R=p,当nums[p]=最小值时,R=p-1就会跳过最小值。选Lp段,L不变。
- 最终返回 p L R都行