【题目】

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——旋转有序数列找目标值的更多相关文章

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

  2. LeetCode: Search in Rotated Sorted Array II 解题报告

    Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...

  3. [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 ...

  4. [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. [Leetcode] search in rotated sorted array ii 搜索旋转有序数组

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  6. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  7. LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  8. LeetCode——Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  9. LeetCode: Search in Rotated Sorted Array 解题报告

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

随机推荐

  1. Codeforces 1063D Candies for Children

    题目大意 给定整数 $n, k, l, r$,$1\le n, k \le 10^{11}$,$1\le l, r \le n$ . 令 $ m = r - l + 1$,若 $m \le 0$,$m ...

  2. vue中scoped vs css modules

    注意:此文是默认你已经具备scoped和css modules的相关基础知识,所以不做用法上的讲解. 在vue中,我们有两种方式可以定义css作用域,一种是scoped,另一种就是css module ...

  3. 雪人(snowman)

    test1025 五子棋(fir) 依照题意模拟即可,先判是否合法,然后在判是否胜利 迷宫(maze) 折半搜素裸题 雪人(snowman) 二分+hash a1-b1=a2-b2=a3-b3 等价于 ...

  4. matplotlib pyplot 中文显示问题

    import pylab pylab.mpl.rcParams['font.sans-serif'] = ['SimHei'] pylab.mpl.rcParams['axes.unicode_min ...

  5. BZOJ 3513: [MUTC2013]idiots

    3513: [MUTC2013]idiots Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 476  Solved: 162[Submit][Stat ...

  6. [NOIP2013] 提高组 洛谷P1967 货车运输

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

  7. 常用“Request.ServerVariables()”汇总

    原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] Request.ServerVariables("REMOTE_ADDR")         ...

  8. webRTC实战总结

    前言 前段时间一直在忙一个基于WebRTC的PC和移动端双向视频的项目.第一次接触webRTC,难免遇到了许多问题,比如:webRTC移动端兼容性检测,如何配置MediaStreamConstrain ...

  9. Docker(六):容器

    一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将一个在终止状态的容器重新启动,因为Docker的容器实在是太轻量了,很多用户都可以随时删除和新创建容器. 新建并启动 $s ...

  10. [LeetCode] Longest Common Prefix 字符串公有前序

    Write a function to find the longest common prefix string amongst an array of strings. Hide Tags Str ...