【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 < ... 
