Romok007's blog

By Romok007, history, 4 years ago, In English

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 :).

  • Vote: I like it
  • -18
  • Vote: I do not like it

| Write comment?
»
4 years ago, # |
  Vote: I like it 0 Vote: I do not like it

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 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    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 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      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".