【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
【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(在旋转数组中搜索)】的更多相关文章
- 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 ...
- 【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 ...
- [LeetCode] 033. Search in Rotated Sorted Array (Hard) (C++)
指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 033. ...
- [LeetCode]题解(python):081 - Search in Rotated Sorted Array II
题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...
- [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 ...
- 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 ...
- [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]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. 思路 ...
- [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. ...
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- 圆角矩形“RoundRectShape”使用详解
圆角矩形 常用作一些组件的背景 构造函数: RoundRectShape(float[] outerRadii, RectF inset, float[] innerRadii) Specifies ...
- “Parsing filters unsupported” error during extraction of RAR file
up vote 159 down vote accepted You can use: sudo apt-get install unrar or sudo apt-get install unar ...
- 二.Windows I/O模型之异步选择(WSAAsyncSelect)模型
1.基于windows消息为基础的网络事件io模型.因此我们必须要在窗口程序中使用该模型.该模型中的核心是调用WSAAsyncSelect函数实现异步I/O. 2.WSAAsyncSelect函数:注 ...
- Redis 四:存储类型之散列类型
1.散列类型表达方式简介: =========================================== 键 字段 值 =================================== ...
- box-shadow 阴影剖析
box-shadow的四个值分别是左右偏移,上下偏移,向四周模糊扩算,距离四周边缘的距离,最后一个是阴影的颜色值,如图示例: 上代码,复制代码,就可以看到上图的效果 <!DOCTYPE html ...
- 基准测试-jmeter压力测试activeMQ之一环境安装配置
jmeter压力测试activeMQ 摘要:linux(CentOS)单机activeMQ安装.window(2008Server)Jmeter配置activeMQ包.Jmeter配置linux监控 ...
- Robot Framework(二)测试数据语法
2.1.1文件和目录 测试数据的层次结构安排如下: 测试数据在测试数据文件中创建. 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件. 包含测试数据文件的目录构成了更高级别的测试套件.这样的 ...
- Quartz经典入门案列
一.Quartz简介 Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等.Spring对Quartz的集成与其对JDK Timer的集成在任务.触发 ...
- 【转】ROI Pooling
Faster rcnn的整体构架: 训练的大致过程: 1.图片先缩放到MxN的尺寸,之后进入vgg16后得到(W/16,H/16)大小的feature map: 2.对于得到的大小为(W/16,H/1 ...
- luogu P2634 [国家集训队]聪聪可可 点分治
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...