【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 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.
【二分思路】
分情况讨论,数组可能有以下三种情况:
然后,再看每一种情况中,target在左边还是在右边,其中第一种情况还可以直接判断target有可能不在数组范围内。
public class Solution {
public int search(int[] A, int target) {
int len = A.length;
if (len == 0) return -1;
return binarySearch(A, 0, len-1, target);
}
public int binarySearch(int[] A, int left, int right, int target) {
if (left > right) return -1;
int mid = (left + right) / 2;
if (A[left] == target) return left;
if (A[mid] == target) return mid;
if (A[right] == target) return right;
//图示情况一
if (A[left] < A[right]) {
if (target < A[left] || target > A[right]) { //target不在数组范围内
return -1;
} else if (target < A[mid]) { //target在左边
return binarySearch(A, left+1, mid-1, target);
} else { //target在右边
return binarySearch(A, mid+1, right-1, target);
}
}
//图示情况二
else if (A[left] < A[mid]) {
if (target > A[left] && target < A[mid]) { //target在左边
return binarySearch(A, left+1, mid-1, target);
} else { //target在右边
return binarySearch(A, mid+1, right-1, target);
}
}
//图示情况三
else {
if (target > A[mid] && target < A[right]) { //target在右边
return binarySearch(A, mid+1, right-1, target);
} else{ //target在左边
return binarySearch(A, left+1, mid-1, target);
}
}
}
}
我的解法,不是最优解
class Solution {
public:
int search(int A[], int n, int target) {
if(A==NULL||n<) return -;
int index=;
for(int i=;i<n;i++){
if(A[i-]>A[i]){
index=i;
break;
}
}
int left,right;
if(target>=A[]&&target<=A[index-]){
left=;
right=index-;
}else if(target>=A[index]&&target<=A[n-]){
left=index;
right=n-;
}else
return -;
while(left<=right){
int mid=(left+right)/;
if(target==A[left])
return left;
if(target==A[right])
return right;
if(target==A[mid])
return mid;
if(target>A[left]&&target<A[mid]){
left++;
right=mid-;
}else{
right--;
left=mid+;
}
}
return -;
}
};
【LeetCode】Search in Rotated Sorted Array——旋转有序数列找目标值的更多相关文章
- LeetCode:Search in Rotated Sorted Array I II
LeetCode:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to y ...
- LeetCode: Search in Rotated Sorted Array II 解题报告
Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...
- [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 ...
- [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- [Leetcode] search in rotated sorted array ii 搜索旋转有序数组
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
- LeetCode——Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- LeetCode: Search in Rotated Sorted Array 解题报告
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- 【bzoj3091】城市旅行 LCT区间合并
题目描述 输入 输出 样例输入 4 5 1 3 2 5 1 2 1 3 2 4 4 2 4 1 2 4 2 3 4 3 1 4 1 4 1 4 样例输出 16/3 6/1 题解 LCT区间合并 前三个 ...
- inner join和left join 、right join 的区别?
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- windows api 程序
#include "StdAfx.h" #include<windows.h> #include<mmsystem.h> LRESULT CALLBACK ...
- Linux下调试段错误 (gdb,core,ulimit)
Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位. (1)首先 在makefile中要增加编译调试选项 -g,才可以利用下面的gdb来调试 gc ...
- bzoj 2563 贪心 思想
BZOJ2563阿狸和桃子的游戏 2563: 阿狸和桃子的游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 952 Solved: 682[Su ...
- [暑假集训--数论]poj2909 Goldbach's Conjecture
For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 ...
- Heritrix3.0.0启动介绍
下面开始使用Heritrix3.0.0 进 入CMD(开始->运行),进入Heritrix3.0.0所在目录,我这里是D:/heritrix/heritrix3.0.0/bin,这里 大家截图也 ...
- msm8917 GPIO Voh(min)
有些 pin 可以當成多種 function, 此例以 GPIO function P3 voltage 為例 Voh(min) = 1.67 - 0.45 = 1.22 V
- 使用layer的iframe层提交表单后,需要关闭当前的iframe层,然后刷新父页面的方法2
<input type="button" onclick="edit(${it.id?c})" class="layui-btn layui-b ...
- Django笔记:常见故障排除
Django框架下MySQLdb模块在python3中无法使用的问题的解决方案 由于python3环境下目前还没有官方的mysqldb模块,Django框架中又强制要求使用mysqldb,为了解决这个 ...