задача не на каждый деньк сожалению, да.
var largestRectangleArea = function(heights, currents) {
let maxArea = 0;
let lastH = 0;
let currentsCount = 0;
for (let i = 0; i <= heights.length; ++i) {
let h = i < heights.length ? heights[i] : 0;
let left = i;
while (currentsCount && currents[currentsCount - 1].h > h) {
const r = currents[--currentsCount];
maxArea = Math.max(maxArea, r.h * (i - r.left));
left = r.left;
}
if (h > 0 && (!currentsCount || currents[currentsCount - 1].h < h)) {
if (currentsCount < currents.length) {
const item = currents[currentsCount];
item.left = left;
item.h = h;
} else {
currents.push({left, h})
}
currentsCount++;
}
}
return maxArea;
};
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalRectangle = function(matrix) {
const heights = Array(matrix[0].length).fill(0);
const currents = [];
let max = 0;
for (let i = 0; i < matrix.length; ++i) {
const line = matrix[i];
for (let j = 0; j < line.length; ++j) {
heights[j] = line[j] === '1' ? heights[j] + 1 : 0;
}
max = Math.max(max, largestRectangleArea(heights, currents));
}
return max;
};
const firstMountValue = useRef(value).current;
useEffect(() => {..... firstMountValue ...}, [firstMountValue]);
в экшен SET_RND_NUM не передавать рандомное число, перенеся эту логику в редьюсер. Да, редьюсер перестанет быть "чистой функцией", но невелика потеря.
В объекте не может быть двух ключей с одинаковым именем (например, i). Так мир устроен.