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