Search in Rotated Sorted Array
2015-06-13 05:00
501 查看
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 7might 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.
1. 0 1 2 4 5 6 7
2. 7 0 1 2 4 5 6
3. 6 7 0 1 2 4 5
4. 5 6 7 0 1 2 4
5. 4 5 6 7 0 1 2
6. 2 4 5 6 7 0 1
7. 1 2 4 5 6 7 0
We can use binary search method to solve this problem. Firstly, let's try to find the regular pattern from the rotated array list above. From list 2,3,4, we can see that the value of the middle element is less that the value of the first element and the right
half of every list is in an ascending order. From list 1,5,6,7, we can see that the value of the middle element is larger than the value of the first element and the left half of the list is in an ascending order.
public class Solution {
public int search(int[] nums, int target) {
if (nums == null || nums.length == 0)
return -1;
int start = 0;
int end = nums.length - 1;
while (start < end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target)
return mid;
else if (nums[mid] < nums[start]) {
if (target <= nums[end] && target > nums[mid])
start = mid + 1;
else
end = mid - 1;
}
else {
if (target >= nums[start] && target < nums[mid])
end = mid - 1;
else
start = mid + 1;
}
}
if (target == nums[start])
return start;
else
return -1;
}
}
相关文章推荐
- kickstart是什么
- repodata创建本地YUM仓库(一)
- PXE+kicstart+Vsftpd/NFS/HTTP无人值守批量网络安装
- 量子计算与通讯的基本原理(量子纠缠)
- MySQL+DRBD+heartbeat+LVS+keepalived
- Java之线程状态
- awk调用外部变量
- awk 指令结构格式
- android 按手机返回键2次退出程序
- 解决Laravel 5上传大文件时出现TokenMismatchException的问题
- [.net 面向对象编程基础] (20) LINQ使用
- android 声音播放,我这里是给软件配的音效
- Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana 分块
- 查看jdk位数
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分
- android 读取手机硬件信息,我这里只读出SMEI码
- Codeforces Round #307 (Div. 2) B. ZgukistringZ 暴力
- android 我用过的一些权限,网络、SD卡、手机硬件信息、自动横屏、键盘自动弹出
- Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题
- android 手机系统日期及时间的读取