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相遇的位置就是最小元素的位置
关键点:看清题目旋转其实就是降序的含义,无非是两个降序。