力扣面试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;
    }
}
相关推荐
华清远见成都中心34 分钟前
基于深度学习的异常检测算法在时间序列数据中的应用
人工智能·深度学习·算法
找不到、了1 小时前
Java设计模式之《原型模式》--深、浅copy
java·设计模式·原型模式
এ᭄画画的北北2 小时前
力扣-347.前K个高频元素
算法·leetcode
程序员岳焱3 小时前
Java 调用 Python 脚本:实现 HelloWorld
java·后端·python
etcix3 小时前
wrap cpp variant as dll for c to use
java·c语言·开发语言
我在北国不背锅4 小时前
基于Java的Markdown转Word工具(标题、段落、表格、Echarts图等)
java·word·echarts·markdown
pengzhuofan4 小时前
Java设计模式-建造者模式
java·设计模式·建造者模式
月殇_木言4 小时前
算法基础 第3章 数据结构
数据结构·算法
夕四丶5 小时前
【java实现一个接口多个实现类通用策略模式】
java·策略模式
找不到、了5 小时前
Java设计模式之《策略模式》
java·设计模式·策略模式