Leetcode--Search in Rotated Sorted Array
2017-10-21 16:43
316 查看
题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array/description/
题目的意思是本来一个数组是升序排列的,现在可能以某一个数为结点进行了翻转,也有可能没有。题目是二分查找的变体,但因为有rotate的存在,当切取一半的时候可能会出现误区,需要我们自行判断,数组nums[],左边缘为l,右边缘为r,还有中间点为m,在每次迭代中,分三种情况讨论。
(1)如果target==nums[m],那么m就是我们要的结果,直接返回;
(2)如果nums[m]<nums[r],那么说明从m到r一定是有序的(没有受到rotate的影响),那么我们只需要判断target是不是在m到r之间,如果是则把左边缘移到m+1,否则就target在另一半,即把右边缘移到m-1。
(3)如果nums[m]>=nums[r],那么说明从l到m一定是有序的,同样只需要判断target是否在这个范围内,相应的移动边缘即可。
根据以上方法,每次我们都可以切掉一半的数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。代码如下:
题目的意思是本来一个数组是升序排列的,现在可能以某一个数为结点进行了翻转,也有可能没有。题目是二分查找的变体,但因为有rotate的存在,当切取一半的时候可能会出现误区,需要我们自行判断,数组nums[],左边缘为l,右边缘为r,还有中间点为m,在每次迭代中,分三种情况讨论。
(1)如果target==nums[m],那么m就是我们要的结果,直接返回;
(2)如果nums[m]<nums[r],那么说明从m到r一定是有序的(没有受到rotate的影响),那么我们只需要判断target是不是在m到r之间,如果是则把左边缘移到m+1,否则就target在另一半,即把右边缘移到m-1。
(3)如果nums[m]>=nums[r],那么说明从l到m一定是有序的,同样只需要判断target是否在这个范围内,相应的移动边缘即可。
根据以上方法,每次我们都可以切掉一半的数据,所以算法的时间复杂度是O(logn),空间复杂度是O(1)。代码如下:
int search(vector<int>& nums, int target) { if(nums.empty()) return -1; int l=0,r=nums.size()-1; while(l<=r){ int m=(l+r)/2; if(target==nums[m]) return m; if(nums[m]<nums[r]) { if(target>nums[m]&&target<=nums[r]) l=m+1; else r=m-1; } else { if(target>=nums[l]&&target<nums[m]) r=m-1; else l=m+1; } } return -1; }
相关文章推荐
- [LeetCode] Search In Rotated Sorted Array
- leetcode 81. Search in Rotated Sorted Array II-旋转数组|二分查找
- Leetcode NO.33 Search in Rotated Sorted Array
- leetcode - 33.Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 【LeetCode】Search in Rotated Sorted Array II
- 【Leetcode】之Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array
- Search in Rotated Sorted Array II -- leetcode
- Leetcode102: 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 II
- 【leetcode】Search in Rotated Sorted Array
- Search in Rotated Sorted Array II leetcode
- leetcode 33. Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode - Refresh - Search in Rotated Sorted Array II
- [LeetCode] 81. Search in Rotated Sorted Array II