3411. 最长乘积等价子数组
第一题直接来个下马威,时间复杂度:
function gcd(a, b) {
return b === 0 ? a : gcd(b, a % b)
}
function lcm(a, b) {
return (a * b) / gcd(a, b)
}
var maxLength = function (nums) {
let maxLen = 0
for (let i = 0; i < nums.length; i++) {
let prod = 1
let currentGcd = nums[i]
let currentLcm = nums[i]
for (let j = i; j < nums.length; j++) {
prod *= nums[j]
currentGcd = gcd(currentGcd, nums[j])
currentLcm = lcm(currentLcm, nums[j])
if (prod === currentGcd * currentLcm) {
maxLen = Math.max(maxLen, j - i + 1)
}
}
}
return maxLen
}
3412. 计算字符串的镜像分数
第二题还算是平常题,按照题目说的流程来就行了,主要就是使用一个 map 来维护每个元素的标记状态,时间复杂度:
var calculateScore = function (s) {
const mirror = (char) => String.fromCharCode(219 - char.charCodeAt(0))
const map = new Map()
let ans = 0
for (let i = 0; i < s.length; i++) {
const mirroredChar = mirror(s[i])
const temp = map.get(mirroredChar)
if (temp == undefined || temp.length == 0) {
const item = map.get(s[i])
if (item == undefined) {
map.set(s[i], [i])
} else {
item.push(i)
map.set(s[i], item)
}
} else {
const j = temp.pop()
ans += i - j
map.set(mirroredChar, temp)
}
}
return ans
}