博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Search in Rotated Sorted Array - LeetCode
阅读量:4709 次
发布时间:2019-06-10

本文共 1006 字,大约阅读时间需要 3 分钟。

目录

题目链接

注意点

  • 题目给的序列是一个有序数组按某个轴旋转后的数组
  • 要求时间复杂度为O(logn)

解法

解法一:根据题目的时间复杂度O(logn)要求,很容易想到要用二分搜索。但是二分搜索要求数组是有序的,这样才能判断target在左半边还是右半边,题目的数组并不是整个都是有序的。根据nums的特点可以发现要么[left,mid]是有序的要么[mid,right]是有序的。如果nums[left] < nums[mid]成立可以说明[left,mid]有序,反之[mid,right]有序。在确定了哪半边有序之后就可以用两端端点判断target是否在区间内,进而确定接下来搜索左半边或是右半边。

class Solution {public:    int search(vector
& nums, int target) { int low = 0,high = nums.size()-1; while(low <= high) { int mid = low + (high-low)/2; if(nums[mid] == target) return mid; if(nums[low] <= nums[mid]) { if(target >= nums[low] && target <= nums[mid]) high = mid-1; else low = mid+1; } else { if(target >= nums[mid] && target <= nums[high]) low = mid+1; else high = mid-1; } } return -1; }};

874b0eb1gy1g088h7e2vrj217m0kpgmt.jpg

小结

  • 变种题Search in Rotated Sorted Array - LeetCode

转载于:https://www.cnblogs.com/multhree/p/10387646.html

你可能感兴趣的文章
Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
查看>>
java PDF分页打印
查看>>
数链剖分小结
查看>>
应用nslookup命令查看A记录、MX记录、CNAME记录和NS记录
查看>>
APT攻击
查看>>
做衡八的日子(转自VFleaking)
查看>>
day7.条件和循环
查看>>
(转)log4j(二)——如何控制日志信息的输出?
查看>>
JavaScript简介
查看>>
php.ini中safe_mode开启对PHP系统函数的影响
查看>>
gdb
查看>>
ubuntu清理旧内核
查看>>
Node之安装篇
查看>>
Android的Animation之LayoutAnimation使用方法
查看>>
二分图最大匹配算法-Hopcroft-Karp模板
查看>>
发布和订阅的删除
查看>>
使用LinQ进行增删改查
查看>>
关于iOS适配问题
查看>>
C语言博客作业--嵌套循环
查看>>
内部类 ( Inner Class )
查看>>