leetcode-33搜索旋转排序数组(二分)[通俗易懂]

leetcode-33搜索旋转排序数组(二分)[通俗易懂]整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 ta

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

整数数组 nums 按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

示例 1:

输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
示例 2:

输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1
示例 3:

输入:nums = [1], target = 0
输出:-1
 

提示:

1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
nums 中的每个值都 独一无二
题目数据保证 nums 在预先未知的某个下标上进行了旋转
-10^4 <= target <= 10^4
 

进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?

题解
二分,如果左边有序并且target在范围内,则…否则…

class Solution { 
   
public:
    int search(vector<int>& nums, int target) { 
   
        int l = 0,r = nums.size() - 1;
        while(l < r){ 
   
            int mid = (l + r) >> 1;
            if(nums[mid] >= nums[l] && target <= nums[mid] && target >= nums[l]){ 
   
                r = mid;
            }else if(nums[mid] >= nums[l]){ 
   
                l = mid + 1;
            }
            else if(nums[mid + 1] <= nums[r] && target <= nums[r] && target >= nums[mid + 1]){ 
   
                l = mid + 1;
            }
            else r = mid;
        }
        if(nums[l] != target)return -1;
        return l;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168722.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机卫士-12_下载百度手机卫士

    手机卫士-12_下载百度手机卫士手机卫士-12课1手机杀毒模块杀毒原理:1、什么是病毒:特殊的程序,存在在硬盘里面。-如何定义计算机病毒:1、侵犯用户的隐私,偷窃你的私隐数据2、盗号,偷钱。(特洛伊,木马)灰鸽子3、恶意程序,危害设备前提:在用户不知情的情况下安装,在特殊的情况下出发。红蜘蛛,灰鸽子2、如何杀毒?把硬盘上的病毒程序,文件删除掉删除问题:1、不知

    2022年9月23日
    0
  • SDN:软件定义网络

    SDN:软件定义网络

    2021年12月6日
    43
  • LaTeX简明教程(一)[通俗易懂]

    LaTeX简明教程(一)[通俗易懂]LaTeX的安装配置与第一个latex文件的编译(hellolatex!)

    2022年7月1日
    20
  • javascript中条件运算符判断成年_c语言中条件运算符

    javascript中条件运算符判断成年_c语言中条件运算符条件运算符也称三木运算符,三元运算符;例题:// 是否年满18岁 varnum=+prompt(‘请输入年龄’); num>=18&&num>0?alert(‘你已成年’):alert(‘你未满18岁’); // 从两个数中找最大值 varnum1=+prompt(‘输入第一个数字’); varnum2=+prompt(‘输入…

    2022年9月28日
    0
  • oracle安装教程_卸载oracle11g

    oracle安装教程_卸载oracle11g不知道为什么不选择基本安装使用的高级安装启动OUI后出现“选择安装方式”窗口,我们选择:高级安装  步骤3:出现“选择安装类型”窗口,选择我们需要安装的版本。我们在此肯定是选择企业版。  图片看不清楚?请点击这里查看原图(大图)。  至于产品语言不用选择,它会根据当前系统的语言自动调整!  步骤4:出现“安装位置”窗口  图片看不清楚?请点击这里查看原…

    2022年9月21日
    0
  • Offsetof用法「建议收藏」

    Offsetof用法「建议收藏」#include<stddef.h>#include<stdio.h>structaddress{charname[50];charstreet[50];intphone;};intmain(){printf(“address结构中的name偏移=%d字节。\n”,offsetof(structaddress,name));printf(“address结构中的street偏移=%d字节。\n”,offsetof(s

    2022年8月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号