33. Search in Rotated Sorted Array
来源:互联网 发布:长春网络专业人才市场 编辑:程序博客网 时间:2024/06/16 11:11
题目:Search in Rotated Sorted Array
题目叙述
原题链接:https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description
Suppose 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; }};
0 0
- [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
- CF 777A
- 11. Container With Most Water
- 软件测试思想者
- Android弹幕功能实现,模仿斗鱼直播的弹幕效果
- Java基础知识-面向对象2
- 33. Search in Rotated Sorted Array
- jquery.extend用法----$.extend(boolean,dest,src1,src2,src3...)
- [解决方法]Eclipse连接mysql失败:Error1682:Native table 'performance_schma'.'session_variables'
- App框架设计与重构
- mysql表分区
- poj 3468 A Simple Problem with Integers
- Visual Studio-类库中添加已有文件夹的技巧
- IntelliJ IDEA Tomcat配置 详解
- mybatis generator eclipse插件的安装