33. 搜索旋转排序数组

33. 搜索旋转排序数组

转化为两次二分。

java 复制代码
class Solution {
    public int search(int[] nums, int target) {
        int l = 0, r = nums.length - 1;

        // 找到分隔点,大于nums[0]的最后一个数(最大的数)
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(nums[0] > nums[mid]) r = mid - 1;
            else l = mid;
        }

        if(nums[0] > target) r = nums.length - 1;
        else l = 0;

        // 在有序数组中找目标值
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(nums[mid] > target) r = mid - 1;
            else l = mid;
        }

        return nums[l] == target ? l : -1;
    }
}
相关推荐
Hiter_John9 小时前
Golang的循环语句
开发语言·算法·golang
磊 子9 小时前
STL算法库讲解1
开发语言·c++·算法
8Qi810 小时前
LeetCode 474:一和零(Ones and Zeroes)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
stolentime10 小时前
CF2066D2 Club of Young Aircraft Builders (hard version)题解
c++·算法·动态规划·组合数学
一个不知名程序员www10 小时前
算法学习入门---算法题DAY3
c++·算法
七夜zippoe10 小时前
DolphinDB向量化计算:高性能数据处理
算法·dolphindb
悠仁さん10 小时前
哈夫曼树的简单介绍
算法
bIo7lyA8v10 小时前
算法与数据结构协同优化的设计思想的技术8
数据结构·算法
Lsk_Smion10 小时前
力扣实训 _ [98].验证二叉搜索树 _ 将二叉树展开成链表
数据结构·算法·leetcode
8Qi810 小时前
LeetCode 377:组合总和 Ⅳ(Combination Sum IV)—— 题解 ✅
算法·leetcode·动态规划·完全背包