【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 ...
随机推荐
- 【bzoj2721】[Violet 5]樱花 数论
题目描述 输入 输出 样例输入 2 样例输出 3 题解 数论 设1/x+1/y=1/m,那么xm+ym=xy,所以xy-xm-ym+m^2=m^2,所以(x-m)(y-m)=m^2. 所以解的数量就是 ...
- [SDOI2016][bzoj4514] 数字配对 [费用流]
题面 传送门 思路 一个数字能且只能匹配一次 这引导我们思考:一次代表什么?代表用到一定上限(b数组)就不能再用,同时每用一次会产生价值(c数组) 上限?价值?网络流! 把一次匹配设为一点流量,那产生 ...
- BZOJ4650 [NOI2016]优秀的拆分 【后缀数组】
题目 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆 分是优秀的.例如,对于字符串 aabaabaa,如果令 A=aabA=aa ...
- 重绘(repaints)与重排(reflows)
当页面布局和几何属性改变时就需要"重排" 避免在修改样式的过程中使用 offsetTop, scrollTop, clientTop, getComputedStyle() 这些属性, 它们都会刷新渲 ...
- token防止重复提交
Token,可以翻译成标记!最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来. Token一般用在两个地方: 1: 防止表单重复提交 2: anti csrf攻击(Cross-site re ...
- Crash的数字表格(bzoj 2054)
Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如 ...
- Repeater的使用及其鼠标特效,行链接的使用
原文发布时间为:2009-04-22 -- 来源于本人的百度文章 [由搬家工具导入] <asp:Repeater ID="rpt" runat="server&qu ...
- paramiko模块及ssh远程登陆
ssh实现远程登陆一般有两种方式,一种就是用户密码登陆,另一种是密钥登陆(当然默认是要服务端打开ssh服务). 我这里使用这两种方法操作一下远程登陆,测试客户端是本机的root与jeff用户,远程连接 ...
- 在Android 7.0以上PopupWindow.showAsDropDown()不起作用问题
最近优化界面,调用PopupWindow.showAsDropDown()发现,窗口并没有在控件下方显示. 有网友说是7.0以上系统的问题,可以自定义PopupWindow,重写showAsDropD ...
- 判断图连通的三种方法——dfs,bfs,并查集
Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...