【一天一道LeetCode】#33. Search in Rotated Sorted Array
来源:互联网 发布:中国文化产业现状知乎 编辑:程序博客网 时间:2024/06/11 18:39
一天一道LeetCode
本系列文章已全部上传至我的github,地址:
https://github.com/Zeecoders/LeetCode
欢迎转载,转载请注明出处
(一)题目
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.
(二)解题
一个排好序的数组,经过一定的旋转之后得到新的数组,在这个新的数组中查找一个目标数。
那么,首先我们需要在旋转后的数组中找到原数组的起始点,并将数组分成两部分。
例如:4,5,6,7,0,1,2分为4,5,6,7和0,1,2
然后,确定目标数在哪一个部分,
最后,采用二分法来进行加速搜索!
具体看代码:
未优化版本
class Solution {public: int search(vector<int>& nums, int target) { int len = nums.size(); int i = 0 ; int j = len-1; int p = 0 ; while(p+1<len&&nums[p]<nums[p+1]) p++;//找出第一个破坏升序的数即为旋转中心 if(nums[0]<=target) j=p;//确定被查找的数在哪个部分 else if(nums[len-1]>=target) i=p+1; while(i<=j)//二分搜索 { int mid = (i+j)/2; if(nums[mid] == target) return mid; else if(nums[mid] >target) j= mid-1; else i = mid+1; } return -1;//未找到则返回-1 }};
AC之后一看运行时间8ms,看来代码还有待优化,于是在查找旋转中心的方法上进行优化,采用二分法进行搜索旋转中心。
优化版本
class Solution {public: int search(vector<int>& nums, int target) { int len = nums.size(); int i = 0; int j = len - 1; int p = 0; bool isfind = false; if (nums[0]>nums[len-1])//如果进行了旋转 { while (i < j)//二分搜索旋转中心 { if (i == j - 1) { isfind = true; break; } int mid = (i + j) / 2; if (nums[i] < nums[mid]) i = mid; if (nums[j] > nums[mid]) j = mid; } } if (isfind)//找到了旋转中心 { if (nums[0] <= target) { j = i; i = 0; } if (nums[len - 1] >= target) { i = j; j = len - 1;} } while (i<=j)二分搜索目标数 { int mid = (i + j) / 2; if (nums[mid] == target) return mid; else if (nums[mid] >target) j = mid-1; else i = mid+1; } return -1; }};
优化后的版本运行时间4ms,快了一半!
0 0
- 【一天一道LeetCode】#33. Search in Rotated Sorted Array
- 【一天一道LeetCode】#81. Search in Rotated Sorted Array II
- [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.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. 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. 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
- 关于final修饰符你不知道的事
- HTK
- DES加密实现(翻译自书籍《Wiley.Implementing.SSL.TLS.Using.Cryptography.and.PKI》)
- NEFU 558 DFS
- hdu2539:点球大战
- 【一天一道LeetCode】#33. Search in Rotated Sorted Array
- Android系统架构-----Android的系统体系架构
- 【Android】25、启动活动的最佳写法
- Android adb命令与操作
- GestureDetector
- 将CSV文件导入到hive数据库
- python实现nginx图形界面管理
- Codeforces Round 353 div2 675ABCDE
- Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED