一:题目

整数数组 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.因为题目说了这是一个升序的数组,然后变成了旋转数组,那么就可以用二分法
2.那么关于使用二分法:这里分了两步
(1):利用nums[mid] 和 nums[0],来进行判断所分出的两部分中那一部分为有序的
如果nums[mid] > nums[0]的话,那么mid左边的序列为有序的
如果nums[mid] < nums[0]的话,那么mid右边为有序序列
(2):判断出有序序列后,接下来就是判断target是否在该序列中,
如果在左边有序的序列中 nums[l] <= target && target < nums[mid]
这时右边界条件就得进行变化,r = mid - 1;
否则 那么 target 就在 左边的无序列表当中,那么的话我们就又要判断那部分是和 无序的,和 nums[mid]进行比较。。。 和上方一致,
如果在右边的有序序列中 nums[mid] <= target && target < nums[r]
这时左边界:l = mid + 1;
否则类似上方

(3):注意(target和num[l])和(target和num[r]) 因为每次判断有序的范围是跟已
经判断target在哪个区间以内了,所以需要更新比较的边界值

三:上码

 class Solution {public:int search(vector<int>& nums, int target) {/**思路: 1.因为题目说了这是一个升序的数组,然后变成了旋转数组,那么就可以用二分法2.那么关于使用二分法:这里分了两步(1):利用nums[mid] 和 nums[0],来进行判断所分出的两部分中那一部分为有序的如果nums[mid] > nums[0]的话,那么mid左边的序列为有序的如果nums[mid] < nums[0]的话,那么mid右边为有序序列(2):判断出有序序列后,接下来就是判断target是否在该序列中,如果在左边有序的序列中 nums[l] <= target && target < nums[mid]这时右边界条件就得进行变化,r = mid - 1;否则 那么 target 就在 左边的无序列表当中,那么的话我们就又要判断那部分是和                  无序的,和 nums[mid]进行比较。。。。和上方一致,如果在右边的有序序列中 nums[mid] <= target && target < nums[r]这时左边界:l = mid + 1;否则类似上方  (3):注意(target和num[l])和(target和num[r])  因为每次判断有序的范围是跟已        经判断target在哪个区间以内了,所以需要更新比较的边界值          */int n = nums.size();if(n == 0){return -1;}if(nums[0] == target){return 0;}int l = 0;int r = n - 1;int mid;while(l <= r){mid = (l + r)/2;if(nums[mid] == target){return mid;}if(nums[mid] >= nums[l]){//左边序列是有序的if(target >= nums[l] && target < nums[mid]){r = mid - 1;}else{l = mid + 1; }}else{//右边是有序的if(target > nums[mid] && target <= nums[r]){//target在右边的序列中l = mid + 1;}else{r = mid - 1;}}}return -1;}
};


加油 BOY!!!and girl

特别提醒 :要特别注意本题的边界条件

33. 搜索旋转排序数组(013)二分查找+思路详解+来干了这杯代码!!!!!!相关推荐

  1. LeetCode 33. 搜索旋转排序数组(二分查找)

    1. 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在 ...

  2. 搜索旋转排序数组(JAVA 二分查找)

    整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nu ...

  3. leetcode 81. 搜索旋转排序数组 II(二分查找)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 , ...

  4. LeetCode81. 搜索旋转排序数组 II(二分查找)

    题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在 ...

  5. 59. Leetcode 81. 搜索旋转排序数组 II(二分查找-局部有序)

    已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同.在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使 ...

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

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

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

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

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

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

  9. 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, ...

最新文章

  1. 无人机寻迹要两个单片机吗_你知道要从哪两个方面选择硬质合金锯片吗?
  2. 卫星还在“织网” 北斗时代尚需时日
  3. 批处理-DHCP绑定IP地址
  4. jsp页面中使用超链接标签a中的属性href和onclick同时触发怎么执行
  5. js 手机端触发事事件、javascript手机端/移动端触发事件
  6. RabbitMQ是如何运转的?
  7. Spring Boot 消息队列 RocketMQ 入门
  8. 【算法系列之十一】k个一组翻转链表
  9. 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)
  10. python开发--ModuleNotFoundError: No module named 'pyaudio'
  11. c语言实现 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
  12. (转)DPDK内存管理 04 ---- rte_malloc内存管理
  13. URLDecoder和URLEncoder详解
  14. HP计算机管理软件,HP Power Assistant
  15. 2020年中式烹调师(高级)考试试卷及中式烹调师(高级)模拟考试题
  16. KO data-bind=“click: func“函数自动执行问题
  17. JBoss EAP 7消息系统
  18. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME e
  19. 如何永久去除CSDN中图片的水印
  20. import java.io后报错_用JSP+JAVABEAN实现一个根据圆半径求圆面积、圆周长的功能:为什么我的老出错啊错误:...

热门文章

  1. 用 Visual Studio 发布一个 Azure 云 Web 应用程序
  2. jQuery选择器和选取方法
  3. ArcGIS实验教程——实验十二:栅格数据投影变换
  4. IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
  5. Android插件化开发之动态加载三个关键问题详解
  6. Android之Activity的4种加载模式
  7. Android之多线程----异步消息处理机制之Handler详解
  8. 无代码iVX编程实现简单 小蜜蜂 经典游戏
  9. php 判断update返回为0_PHP进行数据库更新update操作,返回状态
  10. 震撼!豆瓣评分9.3,这部纪录片带你感受生命之重!