33. 搜索旋转排序数组

33. 搜索旋转排序数组

题解:

  1. 二分找出翻转的位置
  2. 然后判断在target在前后哪个区间,二分找到target的位置
class Solution {
   public int search(int[] nums, int target) {
        int n = nums.length;
        if (n == 1) {
            return target == nums[0] ? 0 : -1;
        }
        int l = 0, r = n - 1;
        while (l < r) {
            int mid =  (r + l + 1) / 2 ;
            if (nums[mid] >= nums[0]) l = mid;
            else r = mid - 1;
        }
        // 在第一个区间
        if (target >= nums[0]) {
            l = 0;
        } else {
        // 在第二个区间
            l = r + 1;
            r = n - 1;
        }
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (nums[mid] >= target) r = mid;
            else l = mid + 1;
        }
        return nums[r] == target ? r : -1;
    }
}
posted @   Eiffelzero  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示