代码拉取完成,页面将自动刷新
/**
* @param {number[][]} heights
* @return {number[][]}
*/
var pacificAtlantic = function(heights) {
const m = heights.length;
const n = heights[0].length;
const valid = (x, y) => x >= 0 && x < m && y >= 0 && y < n;
const tag = new Array(m).fill(false).map( _ => new Array(n).fill(0));
const directions = [[1, 0], [0, 1], [-1, 0], [0, -1]];
let ret = []
let x = 0; y = 0;
function trace(x, y, offset) {
if(x === 0 || y === 0) {
tag[x][y] |= (1 << offset);
}
if(x === m - 1 || y === n - 1) {
tag[x][y] |= (1 << offset);
}
if((tag[x][y] & (1 << offset)) !== 0) {
directions.forEach(d => {
const cx = x + d[0], cy = y + d[1];
if(valid(cx, cy) && heights[x][y] <= heights[cx][cy] && (tag[cx][cy] & (1 << offset)) === 0) {
// console.log(x, y, cx, cy, 1 << offset);
tag[cx][cy] |= (1 << offset);
trace(cx, cy, offset);
}
})
}
}
for(let i = 0; i < m; i++) {
trace(i, 0, 0);
}
for(let i = 0; i < n; i++) {
trace(0, i, 0);
}
for(let i = 0; i < m; i++) {
trace(i, n - 1, 1);
}
for(let i = 0; i < n; i++) {
trace(m - 1, i, 1);
}
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
if(tag[i][j] === 0b11) {
ret.push([i, j]);
}
}
}
// console.log(tag);
return ret;
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。