[Leetcode] Search in Rotated Sorted Array
来源:互联网 发布:spss17.0软件下载 编辑:程序博客网 时间:2024/05/16 04:35
描述
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.
分析1
给定一个数组,查找某个数是否在这个数组中,这个数组是一个有序数组经过循环移位构成的。
很明显这道题应该用二分查找的方法来做,主要的难点在于怎么缩小查找的范围。
对于一个循环移位数组,它只有三种可能:
1. 没有移位,此时
2. 移位,且初始值在
3. 移位,且初始值在
知道了这些,其他的部分就比较容易处理了,跟标准的二分查找没有太大区别,代码如下。
代码1
class Solution {public: int search(vector<int>& nums, int target) { if (nums.empty()) return -1; int lo = 0, hi = nums.size() - 1; while (lo <= hi) { int mi = lo + (hi - lo) / 2; if (nums[mi] == target) return mi; else if (nums[mi] <= nums[hi] && nums[hi] < nums[lo]) { if (nums[mi] < target && target <= nums[hi]) lo = mi + 1; else hi = mi - 1; } else if (nums[lo] <= nums[mi] && nums[hi] < nums[lo]) { if (nums[lo] <= target && target < nums[mi]) hi = mi - 1; else lo = mi + 1; } else { if (target < nums[mi]) hi = mi - 1; else lo = mi + 1; } } return -1; }};
分析2
对于上面的代码,考虑到第一种可能性整体有序,即可以看成是左边有序也可以看成是右边有序,因此我们可以将类别分成两种
1. 右边有序 对应
2. 左边有序 对应
于是代码可以变得简单一点。
代码2
class Solution {public: int search(vector<int>& nums, int target) { if (nums.empty()) return -1; int lo = 0, hi = nums.size() - 1; while (lo <= hi) { int mi = lo + (hi - lo) / 2; if (nums[mi] == target) return mi; else if (nums[mi] < nums[hi]) { if (nums[mi] < target && target <= nums[hi]) lo = mi + 1; else hi = mi - 1; } else { if (nums[lo] <= target && target < nums[mi]) hi = mi - 1; else lo = mi + 1; } } return -1; }};
相关题目
Find Minimum in Rotated Sorted Array
Search in Rotated Sorted Array II
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- leetcode 97: Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- Leetcode Search in Rotated Sorted Array
- [LeetCode]Search in Rotated Sorted Array
- Java正则表达式入门
- android动画—补间动画(2)
- 嵌入式问题汇总1
- ASP.NET的Gridview标题显示,在数据库的值为1,则显示是等
- Codeforces 699D. Fix a Tree【并查集+思维】
- [Leetcode] Search in Rotated Sorted Array
- 删数问题
- @autoreleasepool在ARC和MRC下的区别
- Largest Rectangle in Histogram
- PX4 代码疑惑(1)
- git 高级配置与使用
- Runtime基础应用
- RMQ
- BZOJ 1069 [SCOI2007] 最大土地面积