左闭右开,缩小边界时,左边需要加1,右边不需要。
1 | public int search(int[] a,int start,int end,int target){/ /前闭后开, |
升序的旋转,{1,2,3,4,5}旋转为 {3,4,5,1,2},在查找某个数时,如果数组中没有重复的数字,把数组从中间分为两个部分。
- left<right,说明没有旋转;
- 如果mid大于left的,说明左边是有序的;
- mid小于left,说明右边数组是有序的。
- 有重复数字的情况:如果left=mid=right,那么无法判断,只能顺序遍历。
- 左边大于等于不能同时一起判断,=只能和<在一块,即left<=mid。右边反过来。
1 | public int findMin(int[] nums) { |