<p>Given an <code>m x n</code> matrix of <strong>distinct </strong>numbers, return <em>all <strong>lucky numbers</strong> in the matrix in <strong>any </strong>order</em>.</p>

<p>A <strong>lucky number</strong> is an element of the matrix such that it is the minimum element in its row and maximum in its column.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> matrix = [[3,7,8],[9,11,13],[15,16,17]]
<strong>Output:</strong> [15]
<strong>Explanation:</strong> 15 is the only lucky number since it is the minimum in its row and the maximum in its column.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]]
<strong>Output:</strong> [12]
<strong>Explanation:</strong> 12 is the only lucky number since it is the minimum in its row and the maximum in its column.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> matrix = [[7,8],[1,2]]
<strong>Output:</strong> [7]
<strong>Explanation:</strong> 7 is the only lucky number since it is the minimum in its row and the maximum in its column.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>m == mat.length</code></li>
	<li><code>n == mat[i].length</code></li>
	<li><code>1 &lt;= n, m &lt;= 50</code></li>
	<li><code>1 &lt;= matrix[i][j] &lt;= 10<sup>5</sup></code>.</li>
	<li>All elements in the matrix are distinct.</li>
</ul>

class Solution {
public:
    vector<int> luckyNumbers(vector<vector<int>>& matrix) {
        std::vector<int> result;
        std::vector<int> min_el_pos = {0,0};
        std::vector<int> max_el_pos = {0,0};
        
        for (int k = 0; k < matrix.size(); k++){
            min_el_pos[0] = k;
            min_el_pos[1] = 0;
            
            for (int i = 0; i < matrix[k].size(); i++){
                if (matrix[k][min_el_pos[1]] > matrix[k][i])
                min_el_pos[1] = i;
            }
                
            max_el_pos[1] = min_el_pos[1];
            
            
            for (int j = 0; j < matrix.size(); j++){
                
                if (matrix[j][min_el_pos[1]] > matrix[max_el_pos[0]][max_el_pos[1]]) {
                    max_el_pos[0] = j;
                    max_el_pos[1] = min_el_pos[1];
                }
            }

        if (min_el_pos[0] == max_el_pos[0] && min_el_pos[1] == max_el_pos[1])
            result.push_back(matrix[min_el_pos[0]][min_el_pos[1]]);
        
        }
    
        return result;
    }
};
14300