28.earch in Rotated Sorted Array(排序旋转数组中查找)
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(排序旋转数组中查找)相关推荐
- Rotated Sorted Array(旋转数组总结)
首先什么叫旋转数组,把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转.对于这样的数组,我们可以画一下的一个图来表示. ...
- python旋转排序数组_LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现...
题目描述: python实现Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2, ...
- Search in Rotated Sorted Array - 循环有序数组查找问题
两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...
- java旋转数组查找某一个值_旋转数组中查找某个元素
在一个排序的数组中,如{1,2,3,4,5,6,7},经过旋转后得到{4,5,6,7,1,2,3},当然也可以得到原数组{1,2,3,4,5,6,7},在该旋转后的数组中查找某个元素. 旋转后的数组可 ...
- 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 ...
- 在升序排序的数组中插入一个元素 用函数编程实现在一个按升序排序的数组中查找x应插入的位置,将x插入数组中,使数组元素仍按升序排列。 提示:插入(Insertion)是数组的基本操作之一。插入法排序算法
我先使用了三个函数参数,参数分别为数组a[],数组元素数量number和需要插入的数字n.函数定义为int f(int a[],int number,int n); #include <stdi ...
- Java—Remove Deplicates from Sorted Array(顺序数组中去重位置)
题目 思路 定义index变量覆盖新数组的索引,从0开始; 遍历数组,索引i从1开始,如果arr[index] != arr[i],则将原数组arr[i]赋值给新索引位置arr[++index]; 遍 ...
- 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 ...
- Rotated Sorted Array旋转排序数组相关题
1.什么是Rotated Sorted Array 在leetcode相关题目中,对Rotated Sorted Array相关的定义为: 整数数组 nums 按升序排列,数组中的值互不相同 . 在传 ...
- LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
最新文章
- PHP学习笔记-GD库与Jpgraph的使用
- 在Linux里使用dosbox运行debug.exe
- java炸弹游戏_java实现数字炸弹
- 【Python CheckiO 题解】Fizz Buzz
- oracle与db2 市场占有率,oracle 与 DB2 的区别
- LeetCode学习记录(4-6)
- HW 基于接口/全局地址池的DHCP
- media query学习笔记
- 基于各系统平台(RedHat Linux、SUSE Linux、CentOS、SUN Solaris10) FTP服务的配
- 解决方案:智慧工地智能巡检方案视频监控系统
- 四川服务器磁盘阵列卡电池性能,内置磁盘阵列卡的不足之处
- visio流程图的叉号_【转】Visio绘制WEB流程图的心得
- 使用xcelsius创建令人惊叹的幻灯片 --xcelsius入门
- ARM DS-5 Development Studio 5.28.1 破解激活教程
- 3个月学习成功上岗软件测试,我一个文科女也能吃IT饭了...
- 10.图灵学院-----阿里/京东/滴滴/美团整理----安全验证篇
- blender 绘制离散顶点, SMPL骨架绘制
- android图形框架之surfaceflinger分析(一)
- 【性能测试】获取性能系统指标之示例Python代码
- PAT-A-1062 Talent and Virtue 【排序】