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相遇的位置就是最小元素的位置

关键点:看清题目旋转其实就是降序的含义,无非是两个降序。

本题使用编程语言: Java