33. Search in Rotated Sorted Array
来源:互联网 发布:电脑弹钢琴软件 编辑:程序博客网 时间:2024/06/04 18:27
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.
思路:
首先,可以第一句先考虑nums
为空的情况,这时候可以直接返回-1
。不过,也可以不考虑这种情况,而直接在程序最后当程序中间的return语句没有被执行,就最后return -1
.
然后,我们想到这道题可以采用Binary Search的思路。返回条件是:if(nums[mid] == target) return mid;
Binary Search具体是分为两层:第一层考虑first到mid这一段是否是sorted。第二层是如果first到mid这一段是sorted,那么再继续考虑target是否在first到mid这一段当中,如果在,就把mid赋给last,如果不在,就把mid + 1赋给first。如果first到mid这一段不是sorted,那么也跟前面类似地考虑target是否在mid到last - 1这一段当中,如果在就把mid + 1赋给first,如果不在,就把mid赋给last。这样就完成了Binary Search的每次折半搜索。最后,加一句返回语句,return -1
.
代码如下:
class Solution {public: int search(vector<int>& nums, int target) { if(nums.empty()) return -1; int first = 0, last = nums.size(); while(first != last){ int mid = first + (last - first) / 2; if(nums[mid] == target) return mid; if(nums[first] <= nums[mid]){ if(nums[first] <= target && target < nums[mid]) last = mid; else first = mid + 1; }else{ if(nums[mid] < target && target <= nums[last - 1]) first = mid + 1; else last = mid; } } return -1; }};
Time : O(lgn)
Space: O(1)
相关题目。
- [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
- 33.Search in Rotated Sorted Array
- 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
- Leetcode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- java关键字详解
- 最流行的4个机器学习数据集
- getopt_long()----命令行参数解析函数使用详解
- ExpandableListView初步使用
- System函数
- 33. Search in Rotated Sorted Array
- 前后端交互中json的用法
- NetworkSecurityConfig: No Network Security Config specified, using platform default
- 调整数组顺序使奇数位于偶数前面
- 启动ArcGIS Serer 端口冲突问题解决方法
- 【深度学习:21 天实战 Caffe】Docker 镜像更新
- 前端工程师前端性能优化及技巧分享--本文转载自360问答
- 单页Web应用(SPA)的简单介绍
- JAVA测试入门(三)