leetcode 33.搜索旋转排序数组

⭐️ 题目描述


🌟 leetcode链接:搜索旋转排序数组

ps: 本题是二分查找的变形,旋转排序数组之后其实会形成两个有序的区间 。算出平均下标先判断是否与 target 相等,因为这样可以减少代码的冗余。如果前者不成立则使用平均下标元素 midIndex 与 数组最后一个元素判断大小(因为我们可以确定第二个有序区间的最大值,而确定不了第一个有序区间的最大值),若小于则当前 midIndex 就在第二个有序区间中,反之在第一个有序区间。知道在哪个区间后,在判断 target 是否在这个区间中以及 nums[midIndex]target 的大小。

代码:

c 复制代码
int search(int* nums, int numsSize, int target){
    int left = 0;
    int right = numsSize - 1;
    while (left <= right) {
        int midIndex = left + ((right - left) / 2);
        if (nums[midIndex] == target) {
            return midIndex;
        } else if (nums[midIndex] < nums[right]) {
            // 在第二个有序区间
            if (target <= nums[right] && nums[midIndex] < target) {
                left = midIndex + 1;
            } else {
                right = midIndex - 1;
            }
        } else {
            // 第一个有序区间
            if (target >= nums[left] && nums[midIndex] > target) {
                right = midIndex - 1;
            } else {
                left = midIndex + 1;
            }
        }
    }
    return -1;
}

相关推荐
三水彡彡彡彡1 小时前
深入理解指针:常量、函数与数组
c++·学习
Rhystt1 小时前
代码随想录第二十六天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
数据结构·c++·算法·leetcode
CappuccinoRose1 小时前
HTML语法学习文档(九)
前端·学习·架构·html5
今儿敲了吗1 小时前
25| 丢手绢
数据结构·c++·笔记·学习·算法
浅念-2 小时前
C++ STL stack、queue 与容器适配器详解
开发语言·c++·经验分享·笔记·学习·面试
2501_918126912 小时前
stm32能刷什么程序?
linux·stm32·单片机·嵌入式硬件·学习
第七序章2 小时前
【Linux学习笔记】git三板斧
linux·运维·服务器·笔记·git·学习
xhyu612 小时前
【学习笔记】推荐系统 (1.基础知识)
笔记·学习
软件资深者2 小时前
2026 版初中几何辅助线教材 PDF|打印即提分,中考几何 “分水岭” 一键通关
学习·数学·pdf·教学·初中数学
TracyCoder1232 小时前
LeetCode Hot100(57/100)——5. 最长回文子串
算法·leetcode·职场和发展