LeetCode task: Fill the matrix with zeros | JavaScript

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ม.ค. 2025

ความคิดเห็น • 64

  • @nuZdarova
    @nuZdarova 4 ปีที่แล้ว +3

    Сильно рад что мне попался ваш канал)) Вы очень крутой, не прекращайте пилить видики!)

    • @frontendscience
      @frontendscience  4 ปีที่แล้ว +3

      Класс! Рад, что понравилось! Благодарю за поддержку)
      Заказывайте новые видео)

  • @ІльченкоАртем
    @ІльченкоАртем 3 ปีที่แล้ว +1

    Спасибо Вам большое, что экономите наше время и даете такое понимание кода. Очень крутое решение делать засечки по краям)

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว

      Рад, что было полезно)

  • @melomalo1682
    @melomalo1682 3 ปีที่แล้ว +1

    Спасибо Сергей за ваше время и силы!

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว

      И Вам спасибо за поддержку)

  • @romanryaboshtan9270
    @romanryaboshtan9270 3 ปีที่แล้ว

    Молодец, что по памяти константу сделал. Хотелось бы увидеть генетический алгоритм решения Коммивояжера, хотя можно и не только генетическим, а какой-нибудь другой

  • @vladimirivanov1583
    @vladimirivanov1583 4 ปีที่แล้ว +2

    Сергей, спасибо за ролики. А можно решить задачу Ханойские башни с произвольным количеством дисков? Желательно в конце посчитать количество ходов для решения. Очень понравились ваши ролики с функциями debounce и throttle. В них видно, насколько Javascript не похож на обычные языки программирования.

    • @frontendscience
      @frontendscience  4 ปีที่แล้ว +2

      Классная идея! Добавил в список видео на будущее!

  • @martDKNY
    @martDKNY 4 ปีที่แล้ว +1

    .. Как сделать функцию, которая представляет объект любой вложенности как в консоли?

  • @ІльченкоАртем
    @ІльченкоАртем 3 ปีที่แล้ว

    Огромное( зато свое=)) 1.Пробегаемся записываем координаты нулей, в отдельный массив. 2. Преобразовываем массив в обьект координатов уже целых строк и столбцов. 3. Опять пробегаемся по исходному массиву но уже со справочником координат с нулями
    function matrix(input) {
    let rows = input.length
    let cols = input[0].length
    const arr = []
    const zeros = []
    const rowZeros = []
    const colZeros = []
    const objZeros = {}
    for (let i = 0; i < rows; i++) {
    for (let j = 0; j < cols; j++) {
    if (input[i][j] === 0) zeros.push([i, j])
    }
    }
    for (let i = 1; i < rows + 1; i++) {
    zeros.forEach((el, index)=>{
    rowZeros.push([zeros[index][0], Math.abs(i - zeros[index][1])])
    })
    }
    for (let j = 1; j < cols + 1; j++) {
    zeros.forEach((el, index)=>{
    colZeros.push([Math.abs(j - zeros[index][1]) , zeros[index][1]])
    })
    }
    const allZeros = [...rowZeros, ...colZeros]
    allZeros.forEach(el => {
    objZeros[el] = 0
    })
    for (let i = 0; i < rows; i++) {
    let localArr = []
    for (let j = 0; j < cols; j++) {
    if (objZeros[`${i},${j}`] === 0) {
    localArr.push(0)
    }
    if (objZeros[`${i},${j}`] === undefined) {
    localArr.push(input[i][j])
    }
    }
    arr.push(localArr)
    }
    return arr
    }

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว

      Благодарю за решение! Сама идея понятна, Но вот код почему-то не совсем корректно работает - надо дебажить
      Your input
      [[1,1,1],[1,0,1],[1,1,1]]
      Output
      [[1,1,1],[1,0,1],[1,1,1]]
      Expected
      [[1,0,1],[0,0,0],[1,0,1]]

  • @yarik83men51
    @yarik83men51 3 ปีที่แล้ว

    Супер

  • @АртемЧепурняк-ж5ъ
    @АртемЧепурняк-ж5ъ 3 ปีที่แล้ว

    Помогите пожалуйста, не понимаю почему у меня массив матрикс меняет свое значение при итерации, когда я сделал копию и все изменения провожу только массивом резалт
    const setZeroes = function(matrix) {
    result = [...matrix];
    for(let m=0; m

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว +1

      Смотри матрица это массив массивов. Когда ты сделал копию через спред, ты создал новый массив внутри которого вставились ссылки на те же самые массивы строк что и были. Получается изменяя значения в новом массиве ты меняешь исходный. Один из способов скопировать такую матрицу JSON.parse(JSON.stringify(martix))

    • @АртемЧепурняк-ж5ъ
      @АртемЧепурняк-ж5ъ 3 ปีที่แล้ว

      @@frontendscience спасибо большое!

  • @AzamatAbduvohidov99
    @AzamatAbduvohidov99 2 ปีที่แล้ว

    👍👍👍👍👍

  • @wisarty
    @wisarty 2 ปีที่แล้ว

    Дякую

  • @ГеоргийПарсегов-и3п
    @ГеоргийПарсегов-и3п 3 ปีที่แล้ว

    То же самое и для этой проверки: if(isCol)matrix[i][0] = 0; Ее вставляем после 21й строчки

  • @ГеоргийПарсегов-и3п
    @ГеоргийПарсегов-и3п 3 ปีที่แล้ว

    Cереж, можно ж было вместо еще одного цикла внизу просто после 27й строки написать так: if (matrix[0][0] === 0) matrix[0][j] = 0;

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว +1

      Друг, давай присылай полное работающее СВОЕ решение, и чтоб оно прошло все тесты, а не рассказывай мне, где в моем решении какую строчку по твоему мнению мне нужно заменить.

  • @neoazazello
    @neoazazello 3 ปีที่แล้ว

    Все супер!. просто фоновая музыка мешает

  • @Miramistin
    @Miramistin 3 ปีที่แล้ว

    Что - то я не пойму. row - это же ряд, а col - колонка. значит row по логике должен быть row = marix[0].length, a column = matrix.length. А в примере на видео наоборот. что-то я запутался

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว +1

      Ты наверное имеешь в виду, где мы создаем переменные с количеством строк и столбцов? Смотри, у нас матрица это массив массивов => массив строчек, в которых есть ячейки. Значит matrix.length это количество строк. А matrix[0].length это количество ячеек в первой строке что = количество столбцов.

    • @Miramistin
      @Miramistin 3 ปีที่แล้ว

      @@frontendscience Спасибо, буду разбираться

  • @juststart3569
    @juststart3569 2 ปีที่แล้ว

    Не знаю, насколько моё решение оптимально по ресурсам, но оно такое:
    function setZeros(m) {
    const n = JSON.parse(JSON.stringify(m));
    const zeros = [];
    n.flat(1).forEach((e, i) => e === 0 ? zeros.push([Math.trunc(i / m[0].length), i % m[0].length]) : 0);
    for (let i = 0; i < zeros.length; i++) {
    n[zeros[i][0]].fill(0);
    for (let j = 0; j < n.length; j++) {
    n[j][zeros[i][1]] = 0;
    }
    }
    return n;
    }

  • @redhook777
    @redhook777 3 ปีที่แล้ว

    У меня как-то так получилось решить.
    let arr1 = [[1,1,1],
    [1,0,1],
    [1,1,1]]
    let arr2 = [[0,1,2,0],
    [3,4,5,2],
    [1,3,1,5]]
    setZero = (matrix) => {
    let col = []
    matrix.forEach((e) => {
    if(e.includes(0)){
    e.forEach((el, i, arr) => {
    if(el == 0) col.push(i)
    arr[i] = 0
    })
    }
    })
    col.forEach((e)=>{
    matrix.forEach((el, i, arr) =>{
    arr[i][e] = 0
    })
    })
    return matrix
    }
    console.log(setZero(arr1))
    console.log(setZero(arr2))

  • @blgarOk
    @blgarOk 3 ปีที่แล้ว

    Многовато логики. Дай мне это решение через месяцок я, пожалуй и не вспомню что к чему) Но для тренировки алгоритмов, пожалуй, полезно)
    function toZero(matrix) {
    let map = {}
    for(let i = 0; i < matrix.length; i++) {
    for(let j = 0; j < matrix[0].length; j++) {
    if(matrix[i][j] === 0) {
    map[i] = map[i] ? [...map[i], j] : [j]
    }
    }
    }
    for(let [key, value] of Object.entries(map)) {
    for(let i = 0; i < matrix.length; i++) {
    if(key == i) {
    matrix[key] = matrix[key].map(() => 0)
    }
    for(let j = 0; j < value.length; j++) {
    matrix[i][value[j]] = 0
    }
    }
    }
    return matrix
    }

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว

      Отличный вариант с map вышел. Благодарю, что поделились. Он компактнее чем вариант из видео - единственное сложность по памяти O(n*m) выходит

  • @user-paint-alexandra
    @user-paint-alexandra 3 ปีที่แล้ว

    Спасибо, вот мое решение:
    function setNulls(matrix) {
    const COLS = matrix[0].length;
    const ROWS = matrix.length;
    let result = [];
    let temp = {
    cols: [],
    rows: [],
    };
    for (let i = 0; i < ROWS; i++) {
    for (let j = 0; j < COLS; j++) {
    if (matrix[i][j] === 0) {
    temp.rows.push(i);
    temp.cols.push(j);
    }
    }
    }
    for (let i = 0; i < ROWS; i++) {
    result[i] = [];
    for (let j = 0; j < COLS; j++) {
    if (temp.rows.includes(i) || temp.cols.includes(j)) {
    result[i][j] = 0;
    } else {
    result[i][j] = matrix[i][j];
    }
    }
    }

    • @user-paint-alexandra
      @user-paint-alexandra 3 ปีที่แล้ว

      Правда, я не уверена, какое здесь О

    • @frontendscience
      @frontendscience  3 ปีที่แล้ว

      Видать не полностью скопировался код. Явно не хватает скобочек закрывающихся да и возврата результата конечного не хватает