升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。

请你在数组中搜索 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {public int search(int[] nums, int target) {if (nums == null || nums.length == 0) return -1;//有序数组,可以使用二分搜索//时间复杂度O(logN),空间复杂度O(1)int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) return mid;//判断mid在哪一部分的升序数组上//在前半部分升序数组上//注意:此处使用小于等于,假设只有两个数,例如1,3找3//如果使用nums[left]<nums[mid]结果为false,走else的逻辑//target<=nums[right],left=mid+1=1,继续走else逻辑会造成查不到数据,返回-1if (nums[left] <= nums[mid]) {//target在left和mid之间if (target < nums[mid] && nums[left] <= target) {right = mid - 1;} else {left = mid + 1;}} else {//在后半部分升序数组上//target在mid和right之间if (nums[mid] < target && target <= nums[right]) {left = mid + 1;} else {right = mid - 1;}}}return -1;}}

Leetcode刷题33. 搜索旋转排序数组相关推荐

  1. Leetcode刷题 33.搜索旋转排序数组

    分析: 首先看到这题的第一印象是题目很长,感觉很复杂,但仔细看下来之后发现题目中间一段对解题没有任何的帮助,重点在最后一句,大概意思就是在目标数组中找到目标数据,并传出对应位置,否则传出-1 清楚了目 ...

  2. LeetCode高频题33. 搜索旋转排序数组

    LeetCode高频题33. 搜索旋转排序数组 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...

  3. leetcode刷题:搜索旋转排序数组

    题目: 分析:当我们将数组旋转的时候,就无法再保证数组是完全有序的了,但是我们可以判断出那块是有序的.然后在进行比较和查找 如下代码: class Solution { public:int sear ...

  4. leetcode刷题 153.寻找旋转排序数组中的最小值

    题目分析: 解法一: 该题是用来寻找最小值,我们可以直接用数组求最小值的方法来进行求解,但是我们观察到此题数组是一个 旋转数组,只要除第一位外后面每一位比第一位小,那么它就是最小值,否则第一位就是最小 ...

  5. 【LeetCode笔记】33. 搜索旋转排序数组(Java、二分法)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 值互不相同:不用考虑重复值情况(要不然比较麻烦) 思路 & 代码 重点在于保证O(logn)的时间复杂度 看成两个数组:前半段 & ...

  6. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  7. LeetCode 33. 搜索旋转排序数组 golang

    33. 搜索旋转排序数组 三个测试用例, 这个题的难度是二分法的左侧条件很难写出来. 4 5 6 0 1 2 3 1 2 3 4 5 6 0 5 1 2 3 4 ( 例如,数组 [0,1,2,4,5, ...

  8. LeetCode—33. 搜索旋转排序数组

    33. 搜索旋转排序数组 题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length ...

  9. 数组的合并和升序排列_leetcode 33 搜索旋转排序数组

    给你一个升序排列的整数数组 nums ,和一个整数 target . 假设按照升序排序的数组在预先未知的某个点上进行了旋转.(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ...

最新文章

  1. Lambda表达式介绍
  2. 大牛书单 | 腾讯运维大咖陪你过724
  3. Python抓取单个网页中所有的PDF文档
  4. PSIM软件学习---07 元件参数动态扫描
  5. 敏捷开发团队绩效管理与目标管理:关于如何为团队设立外部目标
  6. 前台html基础标签7.6
  7. js 动态生成HTML,并加载事件遇到的问题
  8. Malmquist指数DEAP2.1应用
  9. JS分割字符串——split()
  10. java duplicate key_Stream 操作 Duplicate key问题
  11. [Java FX 2] Stage with rounded corners and background image
  12. 1399元千元真旗舰,360手机N5“能耐”在哪?
  13. 作为 Gopher, 你知道 Go 的注释即文档应该怎么写吗
  14. 手把手教你做一个天气时钟,推荐收藏
  15. 超详细解决office2016和visio2016同时安装出错问题
  16. hadoop与spark环境搭建命令简易教程(Ubuntu18.04)
  17. 【医学信息学】研究和统计——队列研究和数据分析
  18. Vue3 使用vant actionBar组件后对icon图标的点击切换效果/点击收藏/取消收藏
  19. 图形学(7)反走样技术
  20. 超融合和服务器关系_一文读懂超融合服务器

热门文章

  1. CEEMDAN、EEMD、EMD、TVF-EMD
  2. 基于企业微信api 开发 消息推送提醒 Python与Java
  3. 群硕助力vivo智能用户运营,数字化驱动零售销量提升
  4. Unity 官方教程1
  5. 志愿模板-大学生寒暑假社会实践报告/企业实习报告模板
  6. 标准版服务器配置文件是哪个,T+12.0标准版的服务器配置是什么样的??
  7. linux驱动学习(七) ioctl中的cmd和_IO() , _IOR() , IOW() ,_IOWR() 以及_IOC_NR()的关系
  8. 色深 (Color Depth)
  9. FireMonkey 手机 APP 的手势
  10. Unity_导航系统