博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】【数组】【查找】【Leetcode】Search in Rotated Sorted Array
阅读量:6902 次
发布时间:2019-06-27

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

Suppose a sorted array 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.

思路:

Point 1

这道题很常见,有三个点需要考虑

1 handle edge case. Thinking about only 2 elements in array.

2 The solution will degrade into O(n) only when there is duplicate elements in array 

For example, for input “1 2 1 1 1 1″, the binary search method below would not work, as there is no way to know if an element exists in the array without going through each element one by one.

3 Merge the 2 steps: find the rotation pivot O( log N) + binary searchO( log N)

举个栗子看看

Look at the middle element (7). Compare it with the left most (4) and right most element (2). The left most element (4) is less than (7). This gives us valuable information — All elements in the bottom half must be in strictly increasing order. Therefore, if the key we are looking for is between 4 and 7, we eliminate the upper half; if not, we eliminate the bottom half.

When left index is greater than right index, we have to stop searching as the key we are finding is not in the array.

NewImage 

Point 2

如果需要进行多次查找,完全可以记下来pivot的地址,那么以后就都可以O(lgn)啦

Point 3

翻了翻题解,发现挺有意思的是brute force在Leetcode OJ上也能Accept,这就要从cache hit rate讲起了:

It is difficult to differentiate between O(n) and O(log n) algorithm in general, as @loick already answered nicely .

Since the O(n) algorithm traverses the array in sequence, it is extremely fast as the cache hit rate is going to be high.

On the other hand, the O(log n) binary search algorithm has more unpredictable array index access, which means it will result in more cache misses.

Unless n is extremely large (up to billions, which is unpractical in this case), there could be a chance that the Brute Force O(n) algorithm is actually faster.

转载于:https://www.cnblogs.com/wei-li/p/3544053.html

你可能感兴趣的文章
大数据时代,渠道模式将转为硬件+软件+数据
查看>>
使用python进行文件备份
查看>>
Qt之QTableView显示富文本
查看>>
慕尼黑讨论放弃 Linux 转投 Windows 10
查看>>
《威胁建模:设计和交付更安全的软件》——第一部分 入 门 指 南
查看>>
JetBrains 为学生教师推出免费 Student License
查看>>
《Adobe InDesign CS6中文版经典教程》—第2课2.8节处理对象
查看>>
《数据结构与抽象:Java语言描述(原书第4版)》一JI2.2.1 延缓处理:throws子句...
查看>>
《计算复杂性:现代方法》——2.2 归约和NP完全性
查看>>
Mozilla 宣布关闭 Persona
查看>>
Ubuntu和FreeBSD即将合体:UbuntuBSD
查看>>
漏洞预警:GitLab 权限泄露漏洞
查看>>
攻击者开始利用 ImageMagick 漏洞攻击网站
查看>>
《Java多线程编程核心技术》——1.12节本章小结
查看>>
看,那人好像一个产品狗,对,这就是产品狗
查看>>
《Visual Basic 2012入门经典》----2.3 使用工具栏
查看>>
《Nmap渗透测试指南》—第10章10.7节Scans标签
查看>>
Machine Learning in Action -- AdaBoost
查看>>
无等待是不够的
查看>>
在 Apache Hive 中轻松生存的12个技巧
查看>>