【leetcode】153 .在旋转排序数组中查找最小值
假设一个长度按升序排列的数组在一和2之间旋转。例如,数组编号=[0,1,2,4,5,6,7]可能会变成:
[4,5,6,7,0,1,2]如果旋转四次。
如果旋转七次,则为[0,1,2,4,5,6,7]。
注意旋转一个数组[a[0],a[1],a[2],a[n-1]]1次导致数组[a[n-1],a[0],a[1],a[2],a[n-2]].
给定已排序的旋转arraynumsofuniqueelements,返回此数组的最小元素。
您必须编写一个运行伊诺(对数n)时间的算法。
解决方案类{
公众号:
int findMin(矢量nums){ 0
//O(logn的时间复杂度感觉是二分法的检索方式)左向右的话最小值就在这里面这样二分检索
//二分检索中间的边界比较麻烦
int n=nums。size();
if(nums[0]=nums[n-1])返回nums[0];
int left=0,right=n-1;
而(左-右-1)
{
int mid=(左/右)/2;
if(nums[左]nums[中])
{
//左=左;
右=中;
}
else if(nums[中]nums[右])
{
左=中;
//右=右
}
else if(nums[左]==nums[中])
{
左=中间1;
}
else if(nums[右]==nums[中])
{
右=中间1;
}
}
返回最小(nums[右],nums[左]);
}
};
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/107454.html