首页 > 代码库 > [leetcode] Search in Rotated Sorted Array
[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 7might become4 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.
https://oj.leetcode.com/problems/search-in-rotated-sorted-array/
思路:使用二分查找,若中间数大于等于最左端数,那左半部分必定有序,否则右半部分有序,通过将目标数与有序部分的最大与最小数比较来判断目标数位于哪一部分。复杂度O(logn)。
注意:此题边界情况,>,>=等需仔细考虑斟酌。
/** * http://blog.csdn.net/linhuanmars/article/details/20525681 * @author jd * */public class Solution { public int search(int[] A, int target) { if (A == null || A.length == 0) return -1; int l = 0, r = A.length - 1, mid; while (l <= r) { mid = (l + r) / 2; if (A[mid] == target) return mid; else if (A[l] <= A[mid]) { if (A[l] <= target && target < A[mid]) r = mid - 1; else l = mid + 1; } else { if (A[mid] < target && target <= A[r]) l = mid + 1; else r = mid - 1; } } return -1; } public static void main(String[] args) { System.out.println(new Solution().search(new int[] { 3,1 }, 1)); System.out.println(new Solution().search(new int[] { 1, 2, 3, 4, 5 }, 3)); System.out.println(new Solution().search(new int[] { 2, 3, 4, 1, 2 }, 3)); System.out.println(new Solution().search(new int[] { 2, 3, 4, 1, 2 }, 1)); System.out.println(new Solution().search(new int[] { 4, 5, 1, 2, 3 }, 5)); System.out.println(new Solution().search(new int[] { 4, 5, 1, 2, 3 }, 3)); }}
参考:
http://blog.csdn.net/zjull/article/details/11780329
http://blog.csdn.net/linhuanmars/article/details/20525681
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。