力扣面试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;
    }
}
相关推荐
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 73: 最小路径和、地下城游戏
数据结构·算法·leetcode·职场和发展·深度优先·动态规划·推荐算法
野蛮人6号2 小时前
力扣热题100道之560和位K的子数组
数据结构·算法·leetcode
Swift社区3 小时前
LeetCode 400 - 第 N 位数字
算法·leetcode·职场和发展
fengfuyao9853 小时前
BCH码编译码仿真与误码率性能分析
算法
Predestination王瀞潞3 小时前
Java EE开发技术(Servlet整合JDBC银行管理系统-上)
java·servlet·java-ee·jdbc
寻星探路3 小时前
Java EE初阶启程记13---JUC(java.util.concurrent) 的常见类
java·开发语言·java-ee
小白不想白a4 小时前
每日手撕算法--哈希映射/链表存储数求和
数据结构·算法
怪兽20144 小时前
什么是 Redis?
java·数据库·redis·缓存·面试
剪一朵云爱着4 小时前
力扣2080. 区间内查询数字的频率
算法·leetcode
Gu_yyqx4 小时前
Java 队列
java