力扣面试150题--搜索旋转排序数组

Day 84

题目描述

思路

标准二分查找要求数组完全有序,但旋转排序数组可以通过以下步骤处理:

  1. 确定中点 mid:计算 mid = beg + (end - beg) / 2,避免整数溢出。
  2. 判断左右哪部分有序:
    如果 nums[beg] <= nums[mid] ,说明左半部分 [beg, mid] 有序。
    否则,右半部分 [mid, end] 有序
  3. 缩小搜索范围:
    如果目标值 target 在有序部分的范围内 ,则在该部分继续搜索。
    否则,在另一部分搜索
java 复制代码
class Solution {
    public int search(int[] nums, int target) {
        int beg=0;
        int end=nums.length-1;
        while(beg<=end){
            int mid=beg+(end-beg)/2;
            if(target==nums[mid]){
                return mid;
            }
            if(nums[beg]<=nums[mid]){//左半有序
                if(target<=nums[mid]&&target>=nums[beg]){
                    end=mid-1;
                }
                else{
                    beg=mid+1;
                }
            }
            else{//右半有序
                if(target>nums[mid]&&target<=nums[end]){
                    beg=mid+1;
                }
                else{
                    end=mid-1;
                }
            }
        }
        return -1;
    }
}
相关推荐
0和1的舞者16 小时前
《网络编程核心概念与 UDP Socket 组件深度解析》
java·开发语言·网络·计算机网络·udp·socket
稚辉君.MCA_P8_Java16 小时前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
oioihoii16 小时前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
N***738516 小时前
SQL锁机制
java·数据库·sql
小白程序员成长日记17 小时前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展
Java天梯之路17 小时前
Java 初学者必看:接口 vs 抽象类,到底有什么区别?
java·开发语言
小熊officer17 小时前
Nginx中正向代理,反向代理,负载均衡
java·nginx·负载均衡
信码由缰17 小时前
Java 应用容器化与部署
java
方白羽17 小时前
Kotlin遇上Java 静态方法
android·java·kotlin
通往曙光的路上17 小时前
焚决糟糕篇
java·spring boot·tomcat