OJ日常 | 二分查找——旋转数组的最小数字
2018-03-21 23:35
344 查看
问题描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。一个答案
这道题第一眼看是并没有联想到二分查找的,想到是遍历数组,第一个降序的数字对,后者。这样明显太简单了,虽然只需要O(n)O(n) ,但是还需要进一步优化。
这道题绊住了一(hen)会(jiu)儿,因为没有注意到关键词非递减,也就是说数字可以相同
基本原理就是让先后指针在分界线两侧无限逼近,所以front=mid而不是front=mid+1
当指针刚好是最小值,后者会导致前指针跑到右侧
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length==0 || array==null) return 0; int len_= array.length; int front = 0; int behind = len_-1; int mid=0; while(behind-front!=1){ mid = (front+behind)/2; if(array[front]>array[mid]) behind=mid; else if(array[front]<array[mid]) front=mid; else front=front+1; } return array[behind]; } }
相关文章推荐
- 【剑指offer】【旋转数组的最小数字 】二分查找的变体
- 二分查找——旋转数组的最小数字
- 剑指Offer面试题8旋转数组的最小数字(二分查找)附带快排和按年龄排序
- 【剑指offer】旋转数组的最小数字&&二分查找
- 旋转数组的最小数字(剑指offer 二分 O(log n))
- 查找旋转数组的最小数字 JAVA实现
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- 二维数组中的查找+旋转数组的最小数字+跳台阶迭代+求幂次+调整数组使奇数位于偶数之前
- 【九度OJ1386】|【剑指offer8】旋转数组的最小数字
- 查找旋转数组的最小数字
- 剑指offer-面试8:旋转数组的最小数字(查找和排序)
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- LeetCode-Find Minimum in Rotated Sorted Array II-旋转排序数组找最小-二分查找
- 查找旋转数组的最小值-- 二分查找
- 【剑指offer】2.4.1查找和排序——面试题8:旋转数组的最小数字
- 剑指offer 8题 【查找和排序 】旋转数组的最小数字
- 【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字
- 查找和排序-——旋转数组的最小数字
- leetcode解题之153&154. Find Minimum in Rotated Sorted Array版(在旋转的数组中查找最小数字)
- 旋转数组的最小数字(查找和排序)