力扣面试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;
    }
}
相关推荐
fs哆哆8 分钟前
在VB.net中,函数:列数字转字母
java·服务器·前端·javascript·.net
hqxstudying19 分钟前
J2EE模式---组合实体模式
java·数据库·spring·oracle·java-ee·mvc
趙卋傑19 分钟前
Spring MVC
java·开发语言·后端·spring·mvc
hqxstudying22 分钟前
J2EE模式---服务定位器模式
java·开发语言·后端·python·spring·java-ee
ZLRRLZ22 分钟前
【数据结构】二叉树进阶算法题
数据结构·c++·算法
花落人散处37 分钟前
SpringAI——完成 Function Calling
java·后端·openai
1白天的黑夜11 小时前
二分查找-153-寻找旋转排序数组中的最小值-力扣(LeetCode)
c++·leetcode·二分查找
用户260087353421 小时前
DeepSeek-R1 与 Deep Research 复现之旅
java
知行小栈1 小时前
牛马的人生,需要Spring Shell
java·后端·spring
pimkle1 小时前
LC 135 分发糖果 JavaScript ts
leetcode·typescript