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;
    }
}
相关推荐
Savior`L15 小时前
二分算法及常见用法
数据结构·c++·算法
mmz120716 小时前
前缀和问题(c++)
c++·算法·图论
努力学算法的蒟蒻16 小时前
day27(12.7)——leetcode面试经典150
算法·leetcode·面试
甄心爱学习17 小时前
CSP认证 备考(python)
数据结构·python·算法·动态规划
kyle~18 小时前
排序---常用排序算法汇总
数据结构·算法·排序算法
AndrewHZ18 小时前
【遥感图像入门】DEM数据处理核心算法与Python实操指南
图像处理·python·算法·dem·高程数据·遥感图像·差值算法
CoderYanger18 小时前
动态规划算法-子序列问题(数组中不连续的一段):28.摆动序列
java·算法·leetcode·动态规划·1024程序员节
有时间要学习18 小时前
面试150——第二周
数据结构·算法·leetcode
liu****19 小时前
3.链表讲解
c语言·开发语言·数据结构·算法·链表