Untitled

 avatar
unknown
plain_text
23 days ago
1.2 kB
2
Indexable
class Solution {
public:
    bool isValid(int i , int j , int n , int m) {
        if(i >= n || j >= m || i < 0 || j < 0)return false;
        return true;
    }

    vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
        int n = isWater.size(), m = isWater[0].size();
        vector<vector<int>> ans(n, vector<int>(m, -1));

        queue < pair < int , int > > q;

        int dx[4] = {0 , 0, 1 , -1} , dy[4] = {1, -1, 0, 0};

        for(int i=0;i<n;i++) {
            for(int j=0;j<m;j++) {
                if(isWater[i][j] == 1) {
                    q.push({i,j});
                    ans[i][j] = 0;
                }
            }
        }

        while(!q.empty()) {
            pair < int , int > indices = q.front();
            q.pop();

            for(int i=0;i<4;i++) {
                int nextI = indices.first + dx[i];
                int nextJ = indices.second + dy[i];

                if(isValid(nextI, nextJ, n , m) && ans[nextI][nextJ] == -1) {
                    ans[nextI][nextJ] = ans[indices.first][indices.second] + 1;
                    q.push({nextI, nextJ});
                }
            }
        }

        return ans;
    }
};
Leave a Comment