力扣面试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;
    }
}
相关推荐
晨曦夜月8 小时前
笔试强训day7
开发语言·c++·算法
iAkuya8 小时前
(leetcode)力扣100 14合并区间(差分/排序)
算法·leetcode·职场和发展
老华带你飞8 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
木心爱编程8 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——按钮与标签联动:QPushButton + QLabel 实现图片切换器
java·c++·qt
leiming69 小时前
C++ 02 函数模板案例
开发语言·c++·算法
椰羊~王小美9 小时前
setScale没传roudingmode,为什么会报错
java
WizLC9 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
喝汽水的猫^9 小时前
Java实现Excel 导出(多 Sheet、复杂格式)
java·excel
自然常数e9 小时前
深入理解指针(6)
c语言·数据结构·算法·visual studio
Xの哲學9 小时前
Linux VxLAN深度解析: 从数据平面到内核实现的全面剖析
linux·服务器·算法·架构·边缘计算