美文网首页
改良的二分法-旋转数组

改良的二分法-旋转数组

作者: yz_wang | 来源:发表于2018-07-25 17:48 被阅读0次

Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.

旋转数组是分为两个有序数组,因此可以使用二分查找。
每次判断一段数组是否有序,再根据有序部分首尾两个数字和target的大小关系来判断target存在于哪一部分。有序则调用正常二分,找不到则对剩下一半数组调用此函数。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int res = -1, left = 0, right = n - 1;
        
        while(left <= right)
        {
            int mid = (left + right) >> 1;
            if(target == nums[mid])
            {
                    res = mid;
                    break;
            }
            else if(nums[mid] < nums[right]) //后半部分有序
            {
                if(target > nums[mid] && target <= nums[right])
                    left = mid + 1;
                else
                    right = mid - 1;
            }
            else //前半部分有序
            {
                if(target >= nums[left] && target < nums[mid])
                    right = mid - 1;
                else
                    left = mid + 1;
            }
        }    
        return res;
    }
};

相关文章

  • 二分法查找

    1,二分法查找,插入元素位置 2,数组旋转,求最小值问题 参考 旋转数组的最小元素

  • 改良的二分法-旋转数组

    Suppose a sorted array is rotated at some pivot unknown t...

  • [Leetcode] 33. 搜索旋转排序数组

    33. 搜索旋转排序数组 来源: 33. 搜索旋转排序数组 1. 解题思路 二分法查找 2. 代码

  • 【算法】二分法的使用

    二分法的使用 旋转数组: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,...

  • 二分法查找

    二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法...

  • 2021-07-25【Math】红包概率算法

    笔试算法题(22):二分法求旋转数组最小值 & 骰子值概率_weixin_33918357的博客-CSDN博客[h...

  • 2.10 解题实战:旋转数组的最小数字(改造二分法)

    Chapter2: 时间复杂度分析、递归、查找与排序 10. 解题实战:旋转数组中的最小数字(改造二分法) 题目 ...

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

  • [剑指offer]08-旋转数组的最小数字

    旋转数组的最小数字 题目 给定一个递增的旋转数组A,返回旋转数组中的最小值。旋转数组:给定一个已排序的数组,假设为...

  • swift写二分法查找

    一、原理 1.二分法查找的前提是要先将数组进行排序 2.二分法查找是将数组逐次分成两个数组,然后再在分好的两个数组...

网友评论

      本文标题:改良的二分法-旋转数组

      本文链接:https://www.haomeiwen.com/subject/jwhmmftx.html