LeetCode之团灭旋转数组(相关话题:减治,二分,分治)

目录

题目列表

153. 寻找旋转排序数组中的最小值

154. 寻找旋转排序数组中的最小值 II 

思考一 

思考二 

思考三

033. 搜索旋转排序数组 

方法一

方法二

189. 旋转数组

 081. 搜索旋转排序数组 II

博主总结


题目列表

153. 寻找旋转排序数组中的最小值

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。  

示例 1:

输入:[3,4,5,1,2]
输出:1
示例 2:

输入:[2,2,2,0,1]
输出:0

方法一

题目中给出的是半有序数组,虽然传统二分告诉我们二分只能用在有序数组中,但事实上,只要是可以减治的问题,仍然可以使用二分思想。

思路: 找到旋转点的索引,由此可以将数组分为升序的两段。
根据 nums[0] 与 target 的关系判断 target 在左段还是右段,再对升序数组进行二分查找即可

class Solution {
    public int findMin(int[] nums) {
  
         int index = findRotateIndex(nums,0,nums.length-1);
         return nums[index];
    }

        //返回的数组是最小值索引
    private int findRotateIndex(int[] nums, int left, int right) {
 
        // 如果整个数组是有序的,则没有旋转发生,直接返回0作为旋转索引
        if (nums[left] <= nums[rig

你可能感兴趣的:(#,算法,算法)