【033-Search in Rotated Sorted Array(在旋转数组中搜索)】


【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】

原题

  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.

题目大意

 假设一个排序的数组以一个未知的的枢轴旋转。(即,0 1 2 4 5 6 7可能成为4 5 6 7 0 1 2)。

  给定一个目标值,在数组中搜寻。

假设存在就返回其相应的下标。否则返回-1。

  假设数组中不存在反复值。

 

解题思路

  先在数组中找到最小元素相应的下标,假设下标为0说明整个数组是序的。假设不是说明数组被分成两个有序的区间,推断要查找的元素是那一个有序区间中,然后进行查找。

代码实现

算法实现类

public class Solution {
public int search(int[] nums, int target) { if (nums != null && nums.length > 0) { // 找最小元素相应的下标
int minIndex = searchMinIndex(nums, 0, nums.length - 1); // 整个数组全局有序
if (minIndex == 0) {
return binarySearch(nums, 0, nums.length - 1, target);
}
// 有两个局部有序区间, 如 4 5 6 7 8 9 0 1 2 3
else {
// 恬好和后一个有序区间的最后一个元素相等,返回相应的下标
if (nums[nums.length - 1] == target) {
return nums.length -1;
}
// target可能在后一个有序区间中
else if (nums[nums.length - 1] > target) {
return binarySearch(nums, minIndex, nums.length - 1, target);
}
// target可能是前一个有序区间中
else {
return binarySearch(nums, 0, minIndex -1, target);
}
}
} return -1;
} /**
* 二分搜索
*
* @param nums 数组
* @param start 起始位置
* @param end 结束位置
* @param target 搜索目标
* @return 匹配元素的下标
*/
public int binarySearch(int[] nums, int start, int end, int target) { int mid;
while (start <= end) {
mid = start + ((end - start) >> 1); if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
} return -1;
} /**
* 找最小元素的下标
*
* @param nums 数组
* @param start 起始位置
* @param end 结束位置
* @return 最小元素的下标
*/
public int searchMinIndex(int[] nums, int start, int end) { int mid;
while (start < end) {
mid = start + ((end - start) >> 1);
// 后一个数比前个数小就找到了
if (nums[mid] > nums[mid + 1]) {
return mid + 1;
}
// 说明中间值在第一个有序的数组中
else if (nums[mid] > nums[start]) {
start = mid;
}
// 说明中间值在第二个有序的数组中
else {
end = mid;
}
} // 说明整个数组是有序的
return 0;
}
}

评測结果

  点击图片。鼠标不释放,拖动一段位置。释放后在新的窗体中查看完整图片。

特别说明

欢迎转载。转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47064941

【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】的更多相关文章

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

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

  3. [LeetCode] 033. Search in Rotated Sorted Array (Hard) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 033. ...

  4. [LeetCode]题解(python):081 - Search in Rotated Sorted Array II

    题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...

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

  6. LeetCode 033 Search in Rotated Sorted Array

    题目要求:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you b ...

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

  8. [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. 思路 ...

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

  10. 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. luogu3366 【模板】 最小生成树 Prim

    题目大意 给出一个无向图,求出最小生成树,如果该图不连通,则输出orz. 概念 对于一个无向图,要求选出一些边,使得图上的每一个节点互相连通,且边权和最小.选出的边与节点形成的子图必然是颗树,这棵树叫 ...

  2. vim设置solarized配色

    最近在学习使用VIM.我选择Solarized配色.相信很多人也都在用. 官网地址: http://ethanschoonover.com/solarized 看这配色:八卦乾坤,赏心悦目,高端大气上 ...

  3. NOIP 2010 关押罪犯 并查集 二分+二分图染色

    题目描述: S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值" ...

  4. ORACLE.错误码 ORA-12154 及Oracle客户端免安装版的设置

    .错误码 ORA-12154相信作为ORACLE数据库的开发人员没有少碰到“ORA-12154: TNS: 无法解析指定的连接标识符”,今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到 ...

  5. 5个对话框和FileStream:文件流

    1.private void button1_Click(object sender, EventArgs e) { colorDialog1.ShowDialog();//显示颜色选择器 panel ...

  6. 代理模式(Proxy)C++实现

    代理模式 尽管Decorator的实现部分与代理相似,但Decorator的目的不一样.Decorator为对象添加一个或多个功能,而代理则控制对对象的访问. 意图: 为其他对象提供一种代理以控制对这 ...

  7. 用opcity模拟zindex渐变的效果

    github地址: https://github.com/echoorx/opacity-Gradient zindex好像不能渐变改变,所以用opcity来模拟 <!DOCTYPE html& ...

  8. 获取URL路径参数getUrlParams

    function getUrlParams(){ var reg = new RegExp("(^|&)" + name + "=([^&]*)(& ...

  9. jquery 获取及设置input各种类型的值

    获取选中的值 获取一组radio被选中项的值 var item = $(“input[@name=items]:checked”).val(); 获取select被选中项的文本 var item = ...

  10. 关于中文期刊LaTeX的CCT相关

    最近写完了大论文,回身看了一下CTeX的信息,看了下弄改进版套装的山大和清华的两位大神的博客,发现大神们倒腾过CCT. CCT的FTP还是一直可用的,ftp://ftp.cc.ac.cn/pub/cc ...