原题
154.寻找旋转排序数组中的最小值 II
同 剑指offer 11.旋转数组的最小数字
2020年7月22日 每日一题
题解
方法一 暴力法
旋转之前的数组是排好序的了的,那么说明最小值的那个地方一定比前一个值是小的,这样我们找到了这样的值就直接返回即可。需要注意的是,假如说数组旋转后依旧是单增,那么我们找不到这样的值,这时直接返回首项即可。
本思路java代码示例:
/*作者@v7fgg
*执行用时 :0 ms, 在所有 Java 提交中击败了100.00%的用户
*内存消耗 :39.7 MB, 在所有 Java 提交中击败了60.00%的用户
*2020年5月19日 9:50
*暴力遍历法
*/
class Solution {
public int findMin(int[] nums) {
for(int i=1;i<nums.length;i++){
if(nums[i]<nums[i-1]){
return nums[i];
}
}
return nums[0];//注意单增
}
}
方法二 二分法
/*作者@v7fgg
*执行用时 :1 ms, 在所有 Java 提交中击败了41.46%的用户
*内存消耗 :39.7 MB, 在所有 Java 提交中击败了60.00%的用户
*2020年7月22日 9:50
*二分法
*/
class Solution {
public int findMin(int[] nums) {
int zuo=0;
int you=nums.length-1;
while(zuo<you){
int mid=(zuo+you)/2;
if(nums[mid]<nums[zuo]){you=mid;}
else if(nums[mid]>nums[you]){zuo=mid+1;}
else{you--;}
}
return nums[zuo];
}
}