面试的一道算法题-最多有多少个1是连续的

简介: 面试的一道算法题-最多有多少个1是连续的

输入:一个二维数组,每一个元素为0或者1

输出:最多有多少个1是连续的

连续的定义:上下左右相邻

const arr = [
    [1, 0, 1, 1, 0],
    [1, 0, 0, 1, 1],
    [0, 0, 1, 0, 1],
    [1, 0, 1, 0, 1],
    [1, 0, 1, 1, 0],
];
function getNumber(arr, i, j) {
    let num = 1;
    arr[i][j] = 0;
    // console.log(i, j);
    // console.log(arr[i - 1]);
    if (arr[i - 1] && arr[i - 1][j]) {  //上边
        num += getNumber(arr, i - 1, j);
    }
    if (arr[i + 1] && arr[i + 1][j]) {  //下边
        num += getNumber(arr, i + 1, j);
    }
    if (arr[i][j - 1]) {   //左边
        num += getNumber(arr, i, j - 1);
    }
    if (arr[i][j + 1]) {   //右边
        num += getNumber(arr, i, j + 1);
    }
    return num
}
function getMax(arr) {
    let max = 0
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr[i].length; j++) {
            const ele = arr[i][j]
            if (ele === 1) {
                const cur = getNumber(arr, i, j)
                cur > max && (max = cur)
            }
        }
    }
    return max
}
console.log(getMax(arr))
const arr = [
    [1, 0, 1, 1, 0],
    [1, 0, 0, 1, 1],
    [0, 0, 1, 0, 1],
    [1, 0, 1, 0, 1],
    [1, 0, 1, 1, 0],
];
function getNumber(arr, i, j) {
    let num = 1;
    arr[i][j] = 0;
    // console.log(i, j);
    // console.log(arr[i - 1]);
    if (arr[i - 1] && arr[i - 1][j]) {  //上边
        num += getNumber(arr, i - 1, j);
    }
    if (arr[i + 1] && arr[i + 1][j]) {  //下边
        num += getNumber(arr, i + 1, j);
    }
    if (arr[i][j - 1]) {   //左边
        num += getNumber(arr, i, j - 1);
    }
    if (arr[i][j + 1]) {   //右边
        num += getNumber(arr, i, j + 1);
    }
    return num
}
function getMax(arr, x, y) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr[i].length; j++) {
            const ele = arr[i][j]
            if (ele === 1) {
                const cur = getNumber(arr, x, y)
                return cur;
                // cur > max && (max = cur)
            }
        }
    }
    return 0;
}
console.log(getMax(arr, 2, 2))
相关文章
|
29天前
|
消息中间件 算法 Java
抖音面试:说说延迟任务的调度算法?
Netty 框架是以性能著称的框架,因此在它的框架中使用了大量提升性能的机制,例如 Netty 用于实现延迟队列的时间轮调度算法就是一个典型的例子。使用时间轮调度算法可以实现海量任务新增和取消任务的时间度为 O(1),那么什么是时间轮调度算法呢?接下来我们一起来看。 ## 1.延迟任务实现 在 Netty 中,我们需要使用 HashedWheelTimer 类来实现延迟任务,例如以下代码: ```java public class DelayTaskExample { public static void main(String[] args) { System.ou
29 5
抖音面试:说说延迟任务的调度算法?
|
14天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
2月前
|
机器学习/深度学习 编解码 算法
算法工程师面试问题总结 | YOLOv5面试考点原理全解析
本文给大家带来的百面算法工程师是深度学习目标检测YOLOv5面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
2月前
|
机器学习/深度学习 算法 固态存储
深度学习算法工程师面试问题总结| 深度学习目标检测岗位面试总结
本文给大家带来的百面算法工程师是深度学习目标检测岗位面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
24天前
|
数据采集 算法 数据挖掘
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
|
2月前
|
算法 前端开发 Android开发
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
|
2月前
|
算法 搜索推荐 索引
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(下)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
29 0
|
2月前
|
算法 程序员 索引
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(中)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
30 0
|
2月前
|
算法 C语言 C++
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题(上)
数据结构与算法⑥(第二章OJ题,下)后八道链表面试题
18 0
|
2月前
|
算法 测试技术
数据结构与算法⑤(第二章OJ题,上)前五道链表面试题(下)
数据结构与算法⑤(第二章OJ题,上)前五道链表面试题
26 0