66、二分-搜索旋转排序数组

 

思路:

        不断二分,首先判断左侧有序还是右侧有序,如果左侧有序那么就在左侧寻找,如果右侧有序那就在右侧寻找。假设左侧有序,那就判断目标值在不在左侧,如果在左侧继续左侧二分。如果不在左侧,那么在右侧继续二分再去寻找。

突出点不断二分,然后在有序部分寻找。有序部分没找到,那就在二分再在有序部分寻找。

代码如下:

public class Solution {

  public int search(int[] nums, int target) {
    if (nums == null || nums.length == 0) {
        return -1;
    }
    return process(nums, 0, nums.length - 1, target);
}

private int process(int[] nums, int L, int R, int target) {
    if (L > R) {
        return -1; // 递归结束条件
    }

    int mid = L + (R - L) / 2;
    if (nums[mid] == target) {
        return mid; // 找到目标值
    }

    // 判断左半部分是否有序
    if (nums[L] <= nums[mid]) {
        // 再判断目标值是否在这个有序的部分中
        if (target >= nums[L] && target < nums[mid]) {
            return process(nums, L, mid - 1, target); // 目标在左侧有序部分,继续在这部分查找
        } else {
            return process(nums, mid + 1, R, target); // 目标不在左侧有序部分,转到右侧查找
        }
    } else {
        // 如果左半部分不是有序的,那么右半部分必定是有序的
        // 判断目标值是否在右侧的有序部分中
        if (target > nums[mid] && target <= nums[R]) {
            return process(nums, mid + 1, R, target); // 目标在右侧有序部分,继续在这部分查找
        } else {
            return process(nums, L, mid - 1, target); // 目标不在右侧有序部分,转到左侧查找
        }
    }
}

}

相关推荐

  1. 3-二分-索引二分-搜索旋转排序数组 II

    2024-04-27 23:48:04       59 阅读
  2. 【重点!】【二分查找】33.搜索旋转排序数组

    2024-04-27 23:48:04       67 阅读
  3. 搜索旋转排序数组

    2024-04-27 23:48:04       43 阅读
  4. 搜索旋转排序数组

    2024-04-27 23:48:04       32 阅读
  5. 33.搜索旋转排序数组

    2024-04-27 23:48:04       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 23:48:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 23:48:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 23:48:04       87 阅读
  4. Python语言-面向对象

    2024-04-27 23:48:04       96 阅读

热门阅读

  1. LeetCode解法汇总377. 组合总和 Ⅳ

    2024-04-27 23:48:04       32 阅读
  2. 第29篇 分布式网站

    2024-04-27 23:48:04       22 阅读
  3. Rust 实战练习 - 11. Rust异步的基石 tokio

    2024-04-27 23:48:04       30 阅读
  4. http请求与响应,结合springboot

    2024-04-27 23:48:04       34 阅读
  5. 使用buildozer 打包 apk时遇到的问题

    2024-04-27 23:48:04       24 阅读
  6. c++类基础知识

    2024-04-27 23:48:04       36 阅读
  7. vue3前端调用后端接口实现批量删除

    2024-04-27 23:48:04       38 阅读
  8. Websocket

    2024-04-27 23:48:04       31 阅读
  9. 【前端技术】CSS基础入门篇

    2024-04-27 23:48:04       32 阅读
  10. 机器人系统能用MQTT5.0代替ROS2吗?

    2024-04-27 23:48:04       29 阅读