力扣面试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;
    }
}
相关推荐
zhangkaixuan4561 小时前
Apache Paimon 查询全流程深度分析
java·apache·paimon
cici158742 小时前
MyBatis注解的运用于条件搜索实践
java·tomcat·mybatis
wangqiaowq2 小时前
StarRocks安装部署测试
java·开发语言
计算机学姐2 小时前
基于SpringBoot的高校社团管理系统【协同过滤推荐算法+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
沙威玛_LHE3 小时前
树和二叉树
数据结构·算法
py有趣4 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode
夏鹏今天学习了吗4 小时前
【LeetCode热题100(62/100)】搜索二维矩阵
算法·leetcode·矩阵
工业甲酰苯胺6 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫6 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
@forever@6 小时前
【JAVA】LinkedList与链表
java·python·链表