学生方阵

学校组织活动,将学生排成一个矩形方阵。请在矩形方证中找到最大的位置相连的男生数量。

这个相连位置在一个直线上,方向可以是水平的,垂直的、呈对角线的或着反对角线的。

注:学生个数不会超过10000

输入描述:

输入的第一行为矩形的行数和列数,接下来的n行为矩阵元素,元素间用“,”分隔

输出描述:

输出一个整数,表示矩阵中最长的位置相连的男生个数。

备注:

示例1:

输入:

3,4

F,M,M,F

F,M,M,F

F,F,F,M

输出 3

// female/male ???这题应该是这个意思 M就是男吧 反对角线咋算,求大神指点
let n = 3
let k = 4
let maxLen = 0
let arr = [
    ['F','M','M','F'],
    ['F','M','M','F'],
    ['M','M','F','M']
]
// 横的
for(let i of arr){
    maxLen = Math.max(sameArr(i),maxLen)
}
// // 竖的
let nums  = arr[0].length
for(let j=0;j<nums;j++){
    let newArr = []
    for(let i of arr){
        newArr.push(i[j])
    }
    maxLen = Math.max(sameArr(newArr),maxLen)
}
// 对角
let record = new Map()
for(let i=0;i<arr.length;i++){
    for(let j=0;j<nums;j++){
        let key = j+i
        if (!record.has(key)){
            record.set(key, [])
        }
        record.get(key).push(arr[i][j])
    }
}
for(let [i,nums] of record.entries()){
    maxLen = Math.max(sameArr([...nums]),maxLen)
}
console.log(maxLen)
//计算一维数组男生相连最大值
function sameArr(arr){
    let maxLen = 0
    let left = 0
    let right = 0
    while (right<arr.length) {
        right++
        if(arr[left]===arr[right] && arr[right] === 'M'){
            maxLen = Math.max(right - left + 1,maxLen)
        }else {
            left = right
        }
    }
    return maxLen
}
机试题 文章被收录于专栏

某机试题,网上很少用js写的答案只有自己写了

全部评论
直接穷举法:https://gitee.com/yuubai/yubai-study/blob/master/2022.06/OD-test-200/%E5%AD%A6%E7%94%9F%E6%96%B9%E9%98%B5.js
点赞 回复 分享
发布于 2022-06-19 20:17
反对角线就是从左下到右上吧
点赞 回复 分享
发布于 2022-06-19 18:27

相关推荐

风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务