Saturday, October 29, 2016

matrix flip

Flip row or column of an nxn matrix to get max sum in the upper left quadrant. n is even.

For nxn matrix,
[0,0] can be swapped with [0,n-1], [n-1,0], [n-1,n-1],
[0,1] can be swapped with [0,n-1 -1], [n-1, 1], [n-1,n-1 -1],
and so on.

It is possible to swap any item without changing the other elements in upper left quadrant.

So, maxij = max(a[i,j], a[i,n-1-j], a[n-1-i,j], a[n-1-i,n-1-j])
(m):
    if m == null || m.length() == 0 || m[0].length() == 0:
        throw
    if m.length() &1 != 0 || m[0].length() &1 != 0:
        throw "matrix size is not even"
    if m.length() != m[0].length():
        throw "matrix size is not equal"
    n = m.length()
    maxsum = 0
    for i = 0, i < n/2, i++:
        for i = 0, i < n/2, i++:
            maxij = max(a[i,j], a[i,n-1-j], a[n-1-i,j], a[n-1-i,n-1-j])
            maxsum += maxij
    return maxsum
[Hat tip to HR,JK]

No comments:

Post a Comment