DDSA Solutions

Search in fully rotated sorted 2D matrix

Time: O(log(n*m))
Space: O(1)
Advertisement

Intuition

Search in fully rotated sorted matrix where element may be anywhere. Check each row or flatten.

Algorithm

  1. 1Since rotation breaks the staircase property, binary search each row independently.

Common Pitfalls

  • Cannot use staircase search on fully rotated matrix. O(m log n) by binary searching each row.
Search in fully rotated sorted 2D matrix.java
Java
// Approach: Binary search for row candidate, then binary search within row.
// Time: O(log(n*m)) Space: O(1)
class Solution {
    public boolean searchMatrix(int[][] mat, int x) {
        int n = mat.length;
        int m = mat[0].length;
        int left = 0, right = n * m - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            int midVal = mat[mid / m][mid % m];
            if (midVal == x)
                return true;
            int leftVal = mat[left / m][left % m];
            int rightVal = mat[right / m][right % m];

            if (leftVal <= midVal) {
                if (x >= leftVal && x < midVal)
                    right = mid - 1;
                else
                    left = mid + 1;
            } else {
                if (x > midVal && x <= rightVal)
                    left = mid + 1;
                else
                    right = mid - 1;
            }
        }

        return false;
    }
}
Advertisement
Was this solution helpful?