33. Search in Rotated Sorted Array
2017-03-08 10:34
441 查看
题目:Search in Rotated Sorted Array
题目叙述
原题链接:https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=DescriptionSuppose an array sorted in ascending order 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.
有一个不含重复元素的序列,初始按照升序已经排好,在它的某个节点进行了旋转,现在给你一个值,查找它在序列中的下标,如果没有就返回-1.
例如:
4 5 6 7 0 1 2就是一个已经旋转了的序列。
思路
可以把整个序列看成两部分分别排序好的序列,然后这个两个序列的联系就是右边序列的最大值小于左边序列的最小值。接下来,我们的任务就是需要判断我们所需要查找的数字可能处于哪一部分序列中,然后在该序列中进行二分查找就可以了。
参考代码
class Solution { public: int search(vector<int>& nums, int target) { int len = nums.size(); if(!len) return -1; int st = 0, ed = len - 1; bool ascend = (nums[st] <= nums[ed]); // 假设数组没有旋转,直接判断是否在范围内,然后进行二分查找 if(ascend && (nums[st] > target || nums[ed] < target)) return -1; if(ascend) return midSearch(nums, st, ed, target); else { // 找到数组中最小的元素的小标,以此来分界 int board = findBoard(nums, st, ed); if(nums[ed] == target) return ed; else if(nums[ed] > target) return midSearch(nums, board, ed, target); else return midSearch(nums, st, board - 1, target); } return -1; } private: // 二分查找 int midSearch(vector<int>& nums, int st, int ed, int target) { int mid; while(st < ed){ mid = st + (ed - st) / 2; if(nums[mid] == target) { return mid; }else if(nums[mid] > target){ ed = mid - 1; }else{ st = mid + 1; } } if(nums[st] == target) return st; else return -1; } // 查找两部分的边界 int findBoard(vector<int>& nums, int st, int ed) { int mid; while(st < ed) { mid = st + (ed - st) / 2; if(nums[mid] > nums[ed]) { st = mid + 1; }else{ ed = mid; } } return st; } };
相关文章推荐
- Leetcode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- [LeetCode] 33. Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array
- 33 Search in Rotated Sorted Array
- LeetCode - 33/81/153/154 - Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array leetcode python 2016 new season
- LeetCode 33.Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array
- leetcode 33[medium]---Search in Rotated Sorted Array
- leetcode题解-33 Search in Rotated Sorted Array
- leetcode question 33:Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- LeetCode-33-Search in Rotated Sorted Array(C语言实现)
- [Leetcode 33, Hard] Search in Rotated Sorted Array
- 【leetcode】33. Search in Rotated Sorted Array
- leetcode 33. Search in Rotated Sorted Array 二分查找