zoukankan      html  css  js  c++  java
  • 【题解】【数组】【查找】【Leetcode】Search in Rotated Sorted Array

    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 
    Searching an Element in a Rotated Sorted 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 here.

    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.

  • 相关阅读:
    HDU 6370 dfs+并查集
    牛客网暑期ACM多校训练营(第六场)G
    HDU 6351暴力枚举 6354计算几何
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 A,D
    2018 百度之星 初赛 第六题 HDU6349
    HDU 6336 子矩阵求和
    HDU 6333 莫队+组合数
    BZOJ 2308 莫队入门经典
    Linux系统管理第一章
    2019年7月17日
  • 原文地址:https://www.cnblogs.com/wei-li/p/3544053.html
Copyright © 2011-2022 走看看