一、题目
二、示例
示例一
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
示例二
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1
示例三
输入:nums = [1], target = 0
输出:-1
进阶:你可以设计一个时间复杂度为 O(log n) 的解决方案吗?
三、思路
如果按照普通查询的话,时间复杂度为O(n)
,如果想要事件复杂度为O(logn)
,则应该采用二分查找
。
本题中只是存在旋转排序,但是其顺序任然可以理解为整齐的。只不过需要在其中多一些逻辑判断。
四、代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let left = 0;
let right = nums.length - 1
let flag = -1
while(left <= right) {
let mid = Math.floor((left + right) / 2)
if(nums[mid] === target) {
flag = mid
}
if(nums[left] <= nums[mid]) { //旋转节点在mid以右
if(nums[left] <= target && nums[mid] >= target) {
right = mid - 1
}else {
left = mid + 1
}
}else { //旋转节点在mid以左
if(nums[mid] <= target && nums[right] >= target ) {
left = mid + 1
}else{
right = mid - 1
}
}
}
return flag
};
五、总结
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123170603
内容来源于网络,如有侵权,请联系作者删除!