码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode 33: 搜索旋转排序数组

时间:2018-11-20 11:26:59      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:str   class   ret   时间   leetcode   否则   重复   vector   tco   

题目:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是 O(log n) 级别。

示例 1:

输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4

示例 2:

输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

解析:

取数组正中间的数字nums[m] < nums[end], 那么nums[m]以右是有序的, 只需要判断target是否〈=nums[end]就可以决定保留nums[m]左侧子数组或者右侧,而nums[m]>=nums[end]时, nums[m]左侧一定是有序的, 判断target 是否 >= nums[start] 就可以决定保留那半边子数组

 1 int search(vector<int>& nums, int target) {
 2     int s = 0, e = nums.size()-1;
 3     int m;
 4     while(s<=e)
 5     {
 6         m = (e + s) /2;
 7         if(nums[m] == target)
 8             return m;
 9         else if(nums[m] < nums[e])
10         {
11             if(target > nums[m] && target <= nums[e])
12                 s = m+1;
13             else
14                 e = m-1;
15         }
16        else
17         {
18             if(target < nums[m] && target >= nums[s])
19                 e = m-1;
20             else
21                 s = m+1;
22         }
23         
24     }
25     return -1;
26 }

 

leetcode 33: 搜索旋转排序数组

标签:str   class   ret   时间   leetcode   否则   重复   vector   tco   

原文地址:https://www.cnblogs.com/bzaq/p/9987303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!