学生方阵
学校组织活动,将学生排成一个矩形方阵。请在矩形方证中找到最大的位置相连的男生数量。
这个相连位置在一个直线上,方向可以是水平的,垂直的、呈对角线的或着反对角线的。
注:学生个数不会超过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写的答案只有自己写了

 联想公司福利 1500人发布
联想公司福利 1500人发布