How do I search for a number in a 2d array sorted left to right and top to bottom?

后端 未结 20 727
暖寄归人
暖寄归人 2020-11-22 13:03

I was recently given this interview question and I\'m curious what a good solution to it would be.

Say I\'m given a 2d array where all the numbers i

20条回答
  •  无人及你
    2020-11-22 13:17

    Given a square matrix as follows:

    [ a b c ]
    [ d e f ]
    [ i j k ]
    

    We know that a < c, d < f, i < k. What we don't know is whether d < c or d > c, etc. We have guarantees only in 1-dimension.

    Looking at the end elements (c,f,k), we can do a sort of filter: is N < c ? search() : next(). Thus, we have n iterations over the rows, with each row taking either O( log( n ) ) for binary search or O( 1 ) if filtered out.

    Let me given an EXAMPLE where N = j,

    1) Check row 1. j < c? (no, go next)

    2) Check row 2. j < f? (yes, bin search gets nothing)

    3) Check row 3. j < k? (yes, bin search finds it)

    Try again with N = q,

    1) Check row 1. q < c? (no, go next)

    2) Check row 2. q < f? (no, go next)

    3) Check row 3. q < k? (no, go next)

    There is probably a better solution out there but this is easy to explain.. :)

提交回复
热议问题