力扣33. 搜索旋转排序数组

Problem: 33. 搜索旋转排序数组

题目描述

在这里插入图片描述在这里插入图片描述

思路

1.初始化左右指针:首先,定义两个指针left和right,分别指向数组的开始和结束位置。
2.计算中间值:在left和right之间找到中间位置mid。
3.比较中间值和目标值:如果中间位置的值等于目标值,那么就返回中间位置mid。
4.判断旋转点:如果中间位置的值小于或等于右侧位置的值,说明旋转点在左侧或者就是中间位置。

4.1.如果目标值在中间值和右侧值之间,那么将左侧指针移动到中间位置的右侧(left = mid + 1)。
4.2.否则,将右侧指针移动到中间位置的左侧(right = mid - 1)。

5.处理左侧有序的情况:如果中间位置的值大于右侧位置的值,说明旋转点在右侧。

5.1.如果目标值在左侧值和中间值之间,那么将右侧指针移动到中间位置的左侧(right = mid - 1)。
5.2.否则,将左侧指针移动到中间位置的右侧(left = mid + 1)。

6.未找到目标值:如果在数组中没有找到目标值,那么返回-1。

复杂度

时间复杂度:

O ( l o g n ) O(logn) O(logn)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

class Solution {
    /**
     * Search for a rotationally sorted array(Binary search)
     *
     * @param nums   Given array
     * @param target Number to be found
     * @return int
     */
    public int search(int[] nums, int target) {
        if (nums == null || nums.length < 1) {
            return -1;
        }
        int left = 0;
        int right = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            //Found
            if (nums[mid] == target) {
                return mid;
                //Right-side interval order
            } else if (nums[mid] <= nums[right]) {
                //On the right
                if (target >= nums[mid] && target <= nums[right]) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            } else { //Left-side interval order
                //On the left
                if (target < nums[mid] && target >= nums[left]) {
                    right = mid - 1;
                } else {
                    left = mid + 1;
                }
            }
        }
        return -1;
    }
}

相关推荐

  1. 33. 搜索旋转排序数组

    2024-04-30 06:24:03       7 阅读
  2. _数组24—搜索旋转排序数组II

    2024-04-30 06:24:03       31 阅读
  3. 33.搜索旋转排序数组

    2024-04-30 06:24:03       42 阅读
  4. LeetCode 33 搜索旋转排序数组

    2024-04-30 06:24:03       40 阅读
  5. LeetCode 33. 搜索旋转排序数组

    2024-04-30 06:24:03       36 阅读
  6. 【Leetcode】33- 搜索旋转排序数组

    2024-04-30 06:24:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

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

    2024-04-30 06:24:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

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

    2024-04-30 06:24:03       20 阅读

热门阅读

  1. 在音乐播放器中Android服务的实现

    2024-04-30 06:24:03       12 阅读
  2. 中学人工智能科创设计中心解决方案

    2024-04-30 06:24:03       10 阅读
  3. strcpy,strncpy函数详解

    2024-04-30 06:24:03       12 阅读
  4. vue 配合 video.js 实现视频播放

    2024-04-30 06:24:03       9 阅读
  5. 将后端返回的正则字符串转为正则对象

    2024-04-30 06:24:03       11 阅读