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;
}
}
28.earch in Rotated Sorted Array(排序旋转数组中查找)的更多相关文章
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
- 【LeetCode】Find Minimum in Rotated Sorted Array 在旋转数组中找最小数
Add Date 2014-10-15 Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some p ...
- Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)
题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置:你可以假设在数组中没有重复值出现 举例: (i.e., 0 1 2 4 5 6 7 might becom ...
- [LeetCode] 34. Find First and Last Position of Element in Sorted Array 在有序数组中查找元素的第一个和最后一个位置
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- [CareerCup] 11.3 Search in Rotated Sorted Array 在旋转有序矩阵中搜索
11.3 Given a sorted array of n integers that has been rotated an unknown number of times, write code ...
- lintcode:Recover Rotated Sorted Array恢复旋转排序数组
题目: 恢复旋转排序数组 给定一个旋转排序数组,在原地恢复其排序. 样例 [4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5] 挑战 使用O(1)的额外空间和O(n)时间复杂度 ...
- [LeetCode] Find Minimum 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 migh ...
- [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 migh ...
随机推荐
- XAMPP非本地访问被拒绝解决办法
问题场景: 本机搭建一个apache服务器,正常访问XAMPP目录下的页面. 手机接入同一wifi,以电脑ip方式访问该目录下的页面:提示:Access Denied Access to the re ...
- Luogu 4512 【模板】多项式除法
高级操作,感觉非常神仙. 题目中的字母太难懂了,重新定义一下. $$A(x) = B(x) * C(x) + D(x)$$ 其中,$A(x)$的次数是$n$,$B(x)$的次数是$m$,$A, B$都 ...
- marioTcp
https://github.com/nicholaszj/marioTcp MarioTCP MarioTCP 是使用libevent模型来建立的一个性能强大的TCP服务器. 1:Getting S ...
- linux git server 简易搭建 (ssh访问)
git的服务器搭建,如果无需权限控制,仅团队内部使用,初始化一个服务器仓库,其他人通过ssh访问这个文件夹即可.如需复杂的管理,建议使用gitlab. yum install git -y id gi ...
- CI框架下的PHP增删改查总结
controllers下的 cquery.php文件 <?php class CQuery extends Controller { //构造函数 function CQuery() { par ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder
23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder 2016-07-21 (www.cnblogs.com/icmzn) 模式理解
- postman的使用方法详解!最全面的教程
文章来源:http://www.cnplugins.com/tool/specify-postman-methods.html 一 简介 Postman 是一款功能超级强大的用于发送 HT ...
- tomcat mac
在mac上安装tomcat,教程很不错:http://blog.csdn.net/j2ee_me/article/details/7928493 注意 1.要下载二进制文件,core, 2.解压后移动 ...
- Hook ptrace 调试加入了ptrace函数的程序
Hook ptrace 调试加入了ptrace函数的程序 #import <substrate.h> #if !defined(PT_DENY_ATTACH)#define PT_DENY ...
- Dom4j的一个小例子,用于解析xml文件的元素获取方式(转)
import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationExcepti ...