已知存在一个按非降序排列的整数数组 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,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。

给你 旋转后 的数组 nums 和一个整数 target ,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums 中存在这个目标值 target ,则返回 true ,否则返回 false 。

示例 1:

输入:nums = [2,5,6,0,0,1,2], target = 0
输出:true

解题思路

分成3钟情况讨论
7 8 9 1 2 3 4 5 6
nums[l]=1 nums[mid]=3
nums[l]<nums[mid] 所以只要tar处于nums[l]<=tar<nums[mid]中,直接在[l,mid-1]区间内查找
7 8 9 1 2 3 4 5 6
nums[l]=7 nums[mid]=3
nums[l]>nums[mid] 所以只要tar处于nums[mid]<tar<=nums[r]中,直接在[mid+1,r]区间内查找
3. 1 8 9 1 2 3 4 5 6
nums[l]=nums[mid]=1
nums[l]==nums[mid] l++ 缩小搜索范围

代码

class Solution {public boolean search(int[] nums, int target) {int l=0,r=nums.length-1;while (l<=r){int mid=(r-l)/2+l;if(nums[mid]==target) return true;if(nums[l]==nums[mid]) {l++;continue;}else if(nums[l]<nums[mid])//前半部分是有序的{if(target<nums[mid]&&target>=nums[l])r=mid-1;else l=mid+1;}else {if(target>nums[mid]&&target<=nums[r])l=mid+1;else  r=mid-1;}}return false;}
}

leetcode 81. 搜索旋转排序数组 II(二分查找)相关推荐

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

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

  2. LeetCode 81 搜索旋转排序数组 II

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

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

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

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

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

  5. 81. 搜索旋转排序数组 II

    81. 搜索旋转排序数组 II Ideas 这题,,,,对Python来说一点技术含量没有. 哈哈哈哈,开个玩笑,完美的避开了考点. Code Python class Solution:def se ...

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

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

  7. 81. 搜索旋转排序数组 II(014)二分查找+思路+详解+二种做法

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

  8. ​LeetCode刷题实战81:搜索旋转排序数组 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. LeetCode 79单词搜索80删除排序数组中的重复项Ⅱ81.搜索旋转排序数组Ⅱ

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

最新文章

  1. 快乐的生活 2008-10-10 18:49:00
  2. 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)
  3. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
  4. 用c++自制词法分析器_编译原理笔记 02 词法分析
  5. 全网沸腾!鸿蒙手机要来了
  6. C++ 工程实践(3):采用有利于版本管理的代码格式
  7. java来电报名字的软件_教你一招,手机来电话可以语音报出来电人的姓名和电话号码,收藏...
  8. python下载文件的三种方法
  9. Sqlmap使用教程【笔记精华整理】
  10. 2019年6月28日 星期五 今日计划
  11. linux 6.5光驱是什么意思,linux 6和5有什么不同
  12. 打破清晨喧嚣的 oom
  13. 511遇见易语言调用百度OCR文字在线本地识别及游戏画面时时识别
  14. 手机端页面自适应解决方案
  15. 思岚激光建图传感器slamtec Mapper使用便捷性测评
  16. Java设计模式系列3-----装饰模式,策略模式,观察者模式
  17. linux的nslookup命令,Linux nslookup命令
  18. 计算机英语词典 txt,英汉词典TXT格式英汉词典TXT格式.doc
  19. Result「?」 返回类型拼接
  20. 教大家如何方便地用百度代理装国外ovi store里的软件--页面不会跳来跳去

热门文章

  1. 从功能层次,阐述CPU、接口和外设之间的交互
  2. 300. 最长上升子序列
  3. Python内置数据类型之list
  4. 成功跳槽百度工资从15K涨到28K,威力加强版
  5. java-transaction事件
  6. ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)
  7. 元类(metaclass)
  8. Mapreduce中maptask过程详解
  9. 551. Student Attendance Record I 从字符串判断学生考勤
  10. 【转】PHP面试题总结