LeetCode刷题之HOT100之搜索旋转排序数组

2024/6/2 雨一直下,一个上午都在床上趴着看完了《百年孤独》,撑伞去吃了个饭,又回到了宿舍。打开许久未开的老电脑,准备做题了。《百年孤独》讲了什么,想表达什么,想给读者留下什么,我不知道,看着知乎对它的解读,我都不太满意。有人总认为这些文学作品是为了留下什么,有什么寓意,其实我觉得故事就是故事,不一定非得要一个大团圆乌托邦的寓意来指点道路,或许每个人都难以跳出百年轮回的孤独中,有时候毁灭也代表了永恒。那么,接下来开始做题吧。

1、题目描述

在这里插入图片描述

2、逻辑分析

题目的意思很清晰,数组本来是有序的,经过旋转后被分成了两个部分,但是被分成的两个部分都是有序的,所以一样可以使用二分查找的思想来解决该题。
如题所示:将本来有序的数组[0,1,2,4,5,6,7]旋转后变成了[4,5,6,7,0,1,2]。我们可以看出[4,5,6,7]和[0,1,2]都是有序的,那么我们可以运用二分查找思想来找到目标值target,下面是具体的算法思路。

在这里插入图片描述

3、代码演示

public int search(int[] nums, int target) {
        int n = nums.length;
        // 如果数组为空,返回-1表示未找到 
        if(n == 0){
            return -1;
        }
        // 如果数组只有一个元素,检查是否与目标值相等
        if(n == 1){
            return nums[0] == target?0:-1;
        }
        // 初始化左右指针 
        int l = 0, r = n - 1;
        while(l <= r){
            int mid = (l + (r - l) / 2;
            // 如果中间元素是目标值,返回其索引
            if(nums[mid] == target){
                return mid;
            }
            // 检查左半部分是否有序
            if(nums[0] <= nums[mid]){
                // 如果左半部分有序,检查目标值是否在这个范围内
                if(nums[0] <= target && target <= nums[mid]){
                    // 在左半部分继续搜索
                    r = mid -1;
                }else{
                    // 在右半部分继续搜索
                    l = mid + 1;
                }
            // 如果右半部分有序(或者左半部分无序),检查目标值是否在这个范围内      
            }else{
                if(nums[mid] < target && target <= nums[n - 1]){
                    // 在左半部分继续搜索
                    l = mid + 1;
                }else{
                // 在右半部分继续搜索  
                    r = mid -1;       
                }
            }
        }
        // 如果循环结束仍未找到目标值,返回-1
        return -1;
    }

时间复杂度:O(logn),空间复杂度:O(1)。
好啦,外面大雨不止,今天就不去实验室啦,这样也非常惬意嘿嘿,再见啦!

相关推荐

  1. LeetCode笔记hot 100(一)

    2024-06-06 07:08:07       16 阅读
  2. LeetCode100】33. 搜索旋转排序数组(二分)

    2024-06-06 07:08:07       11 阅读
  3. LeetCode练习与总结:搜索旋转排序数组

    2024-06-06 07:08:07       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 07:08:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 07:08:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 07:08:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 07:08:07       20 阅读

热门阅读

  1. 蓝牙中央管理器初始化详解

    2024-06-06 07:08:07       8 阅读
  2. 科技与环保

    2024-06-06 07:08:07       7 阅读
  3. 服务器端Openresty的Lua 脚本动态生成 HTML 页面

    2024-06-06 07:08:07       8 阅读
  4. Debian常用命令详解

    2024-06-06 07:08:07       6 阅读
  5. NTP网络时间服务器_安徽京准电钟

    2024-06-06 07:08:07       7 阅读
  6. Http和Socks的区别?

    2024-06-06 07:08:07       7 阅读
  7. 机器人抓取检测(Robot Grasping Detection)

    2024-06-06 07:08:07       6 阅读