import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param heights int整型一维数组
* @return int整型
*/
public int findMin (int[] heights) {
int left = 0;
int right = heights.length-1;
while(left<right){
int mid = (left+right)/2;
if(heights[mid]<heights[right]){
left = mid+1;
}else if(heights[mid]>heights[right]){
right = mid;
}else{
left++;
}
}
return heights[left-1];
}
}
本题知识点分析:
1.数组遍历
2.双指针和二分查找
3.数组下标
本题解题思路:
1.初始化两个指针,一个left初始位置,一个right数组结束位置
2.二分思想,通过比较数组中间的元素和数组的最后一个元素来缩小查找范围
3.如果中间元素大于最后一个元素,说明最小元素在中间元素右侧,因为题目其实是降序的,更新 left = mid+1;
4.如果中间元素小于最后一个元素,说明最小元素在中间元素左侧,更新 right = mid;
5.最后left和right相遇的位置就是最小元素的位置
关键点:看清题目旋转其实就是降序的含义,无非是两个降序。

京公网安备 11010502036488号