Блог пользователя Romok007

Автор Romok007, история, 4 года назад, По-английски

Given an unsorted array find the numbers in the array that return true for the following function (defined below).

  1. Function will return true for value x, if all numbers on left side of x are small and all number on the right side of x are greater.

But the question asks us to use randomized binary search (mid element is not decided by (high + low)/2 but by using a random function) to find the solution.

Link to the question : Original Question Source (Round 3 Onsite question)

Example : Input : [ 4, 3, 1, 5, 7, 6, 10] Output : 5,10

Expected Time Complexity : O(n) Expected Space Complexity : O(n)

Any kind of help will be helpful as i am stuck with the question :).

  • Проголосовать: нравится
  • -18
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

a[i] will be good if a[i] >=max(a[1], a[2]..a[i-1] ) and a[i]<=min(a[i+1], a[i+2]..a[n]).

You can use prefix and suffix array to achieve the answer in required complexities

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    yes thats a valid solution but the question asks us to use binary search(using a random function) and i am confused in that part. You can refer the link as well

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      IMO, questions asks to output the numbers which would be detected by new "randomized binary search". You are not supposed to run the "randomized binary search".