题目: 给定一个旋转数组,但是你不知道旋转位置,在旋转数组中找出给定target值出现的位置;你可以假设在数组中没有重复值出现

举例:

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

在旋转后的数组中查找6,则返回index =2. 若查找10,则返回index= -1;

解题思路:

由于数组中没有重复出现的数字,因此旋转后的数组基本可以划分为两部分;因此解题思路可以转换为我们熟悉的二分查找;但是在二分查找时我们需要注意,到底在哪边查找?

1) 假设此时在[start, end]之间查找,则mid = (start + end) / 2;此时有三种情况,即nums[mid] > target, nums[mid] < target, nums[mid] = target;

2)   nums[mid] > target这种情况下,如何缩小start或者end的范围呢?

a)     456789123, nums[mid] = 8, target =2,  此时判断条件应当是nums[start] > nums[end](表示将原数组将数组划分为两部分,第一部分是升序,第二部分也是升序)&& nums[mid] > = nums[start](表示[start, mid]之间的数是一个严格的升序) && target < nums[start](表示所求的值在第二部分的升序中),此时将所有的条件整合起来,则可判断要找的值一定在后半段,即start = mid + 1;否则end = mid -1

3)  nums[mid] < target的情况用同样的方法去除一半

但是要注意每次缩小的一半一定是一个升序或者降序;

代码如下:

 public class Solution {
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
int mid = 0;
while(start <= end)
{
mid = (start + end) / 2;
if(target < nums[mid])
{
if(nums[start] > nums[end] && nums[mid] >= nums[start] && target < nums[start])
start = mid + 1;
else
end = mid - 1;
}
else if(target > nums[mid])
{
if(nums[start] > nums[end] && nums[mid] < nums[end] && target > nums[end])
end = mid - 1;
else
start = mid + 1;
}
else
return mid;
} return -1; }
}

Leetcode33--->Search in Rotated Sorted Array(在旋转数组中找出给定的target值的位置)的更多相关文章

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

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

  3. Leetcode33.Search in Rotated Sorted Array搜索旋转排序数组

    假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目标值, ...

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

  5. LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...

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

  7. [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)

    This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...

  8. [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  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. linux配置tomcat已service方式启动

    1. 在/etc/init.d目录下新建文件,命名为tomcat2. 对tomcat文件进行编辑,执行 # cd /etc/init.d/ # vi tomcat 将下面代码粘上去 注意:下面代码ja ...

  2. win7双网卡走哪个网卡路由设置

    有没有软件能做这个我还真不知道.说说我的做法吧: 单位里无线是可以访问Internet的,有线是用来访问公司内部系统的. 默认的54M无线网络和100M的有线网络,系统在选择默认路由的时候肯定是选择有 ...

  3. (六)我的JavaScript系列:更好的JavaScript之CoffeeScript

    世界上的很多天才都在为构建更好的JavaScript而努力.已经有了很多尝试,其中最有前途的,无非就是CoffeeScript和TypeScript了.面对CoffeeScript,我有一见如故的感觉 ...

  4. Linux下如何修改用户默认目录

      Linux下默认的用户目录一般为/home/xxx(root用户除外),有些时候我们可能需要修改这个目录,下面我就给大家分享2中修改的方法 工具/原料 Linux操作系统 方法/步骤 1 1.切换 ...

  5. 进度条插件使用demo

    1.下载地址: http://down.htmleaf.com/1502/201502031710.zip 2.效果图: 3.HTML代码:其中80设置当前所占百分比,即蓝色部分比例:注意引入必须的j ...

  6. Java 继承与重写

    1.类的继承 1)继承 父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为 通过extends关键字来实现类的继承 子类(Sub class)可以继承父类(Super class)的成员变 ...

  7. MFC【exe】工程中的文件大致信息(翻译的)

    在工程文件夹中有个readme文件,下面是翻译过来的. ======================================================================== ...

  8. 2018.2.25 关于JavaScript

    关于JavaScript 1.数组的归约函数reduce(function(PREV,CUR,I){})会从做导游进行迭代,每次返回的值为下一次的prev参数. 2.在循环遍历数组时若是想在找到结果后 ...

  9. 使用Python生成ASCII字符画

    使用Python生成ASCII字符画 在很多的网站主页中或者程序的注释中会有一些好看的字符注释画.显得很牛逼的样子 例如: 知乎 _____ _____ _____ _____ /\ \ /\ \ / ...

  10. mysql如何让自增id从1开始设置方法

    有两种方式 第一种: 如果表中数据没有用.如果直接删除数据,自动增长ID还是不会从1开始的,可以利用“清空数据表”.这样自动增长ID也将会从1开始. 清空表的sql如下 truncate table ...