Level:

  Medium

题目描述:

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm's runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

思路分析:

  有序旋转数组,设置两个指针,left和right,分别指向数组的左端和右端,求数组的mid,如果mid的值大于left的值,那么旋转点在mid后面,如果小于left,则证明旋转点在mid前面。

  如果旋点在mid的后面,并且target的值大于left处的值,小于mid处的值,那么接下来就可以在left到mid之间进行二分查找target,否则对mid+1到right这部分数组进行递归操作。

  如果旋点在mid的前面,并且target的值大于mid处的值,小于right处的值,那么接下来就可以在mid到right之间进行二分查找target,否则对left到mid-1这部分数组进行递归操作。

代码:

public class Solution{public int search(int []nums,int target){if(nums==null||nums.length==0)return -1;int res=find(nums,0,nums.length-1,target);return res;}public int find(int []nums,int left,int right,int target){if(nums[left]==target)return left;if(nums[right]==target)return right;int mid=(left+right)/2;if(nums[mid]==target)return mid;if(left>right)return -1;if(nums[mid]>nums[left]){ //证明旋转点在mid后面if(target>nums[left]&&target<nums[mid]){return binarySearch(nums,left,mid-1,target);}else{return find(nums,mid+1,right,target);}}if(nums[mid]<nums[left]){ //证明旋转点在mid的前面if(target>nums[mid]&&target<nums[right]){return binarySearch(nums,mid+1,right,target);}else{return find(nums,left,mid-1,target);}}return -1;}public int binarySearch(int []nums,int left,int right,int target){if(left<=right){int mid=(left+right)/2;if(nums[mid]==target)return mid;if(target>nums[mid]){return binarySearch(nums,mid+1,right,target);}if(target<nums[mid]){return binarySearch(nums,left,mid-1,target);}}return -1;}
}

转载于:https://www.cnblogs.com/yjxyy/p/10797586.html

28.earch in Rotated Sorted Array(排序旋转数组中查找)相关推荐

  1. Rotated Sorted Array(旋转数组总结)

    首先什么叫旋转数组,把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转.对于这样的数组,我们可以画一下的一个图来表示. ...

  2. python旋转排序数组_LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现...

    题目描述: python实现Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2, ...

  3. Search in Rotated Sorted Array - 循环有序数组查找问题

    两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...

  4. java旋转数组查找某一个值_旋转数组中查找某个元素

    在一个排序的数组中,如{1,2,3,4,5,6,7},经过旋转后得到{4,5,6,7,1,2,3},当然也可以得到原数组{1,2,3,4,5,6,7},在该旋转后的数组中查找某个元素. 旋转后的数组可 ...

  5. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  6. 在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法

    我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n.函数定义为int f(int a[],int number,int n); #include <stdi ...

  7. Java—Remove Deplicates from Sorted Array(顺序数组中去重位置)

    题目 思路 定义index变量覆盖新数组的索引,从0开始; 遍历数组,索引i从1开始,如果arr[index] != arr[i],则将原数组arr[i]赋值给新索引位置arr[++index]; 遍 ...

  8. 62. Search in Rotated Sorted Array【medium】

    62. Search in Rotated Sorted Array[medium] Suppose a sorted array is rotated at some pivot unknown t ...

  9. Rotated Sorted Array旋转排序数组相关题

    1.什么是Rotated Sorted Array 在leetcode相关题目中,对Rotated Sorted Array相关的定义为: 整数数组 nums 按升序排列,数组中的值互不相同 . 在传 ...

  10. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

最新文章

  1. PHP学习笔记-GD库与Jpgraph的使用
  2. 在Linux里使用dosbox运行debug.exe
  3. java炸弹游戏_java实现数字炸弹
  4. 【Python CheckiO 题解】Fizz Buzz
  5. oracle与db2 市场占有率,oracle 与 DB2 的区别
  6. LeetCode学习记录(4-6)
  7. HW 基于接口/全局地址池的DHCP
  8. media query学习笔记
  9. 基于各系统平台(RedHat Linux、SUSE Linux、CentOS、SUN Solaris10) FTP服务的配
  10. 解决方案:智慧工地智能巡检方案视频监控系统
  11. 四川服务器磁盘阵列卡电池性能,内置磁盘阵列卡的不足之处
  12. visio流程图的叉号_【转】Visio绘制WEB流程图的心得
  13. 使用xcelsius创建令人惊叹的幻灯片 --xcelsius入门
  14. ARM DS-5 Development Studio 5.28.1 破解激活教程
  15. 3个月学习成功上岗软件测试,我一个文科女也能吃IT饭了...
  16. 10.图灵学院-----阿里/京东/滴滴/美团整理----安全验证篇
  17. blender 绘制离散顶点, SMPL骨架绘制
  18. android图形框架之surfaceflinger分析(一)
  19. 【性能测试】获取性能系统指标之示例Python代码
  20. PAT-A-1062 Talent and Virtue 【排序】

热门文章

  1. PS 曲线(改变图片不同的色彩效果)
  2. 13.相机和图像——视场(Field of View),视场实战_4
  3. 移动硬盘内容变成快捷方式处理
  4. 百度wz竞价开户推广营销的四大好处
  5. 【实战 01】心脏病二分类数据集
  6. CNN详解——反向传播过程
  7. 华硕x450jn拆机_华硕笔记本电脑X450JB拆卸并安装固态驱动器
  8. JAVA实现战舰游戏
  9. 题解【[FJOI2018]所罗门王的宝藏】
  10. DLL注入 + VEH 的方式处理异常