leetcode 33: 搜索旋转排序数组
Posted 不想取名字所以就随便写了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 33: 搜索旋转排序数组相关的知识,希望对你有一定的参考价值。
题目:
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [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: 搜索旋转排序数组的主要内容,如果未能解决你的问题,请参考以下文章