第一题

5750. Maximum Population Year

var maximumPopulation = function(logs) {
let res = 1950, maxCnt = 0
for (let year = 1950; year <= 2050; year++) {
let cnt = 0
for (let l复杂度oog of logs) {
if (log[0]<=year&&log[1]>year)复杂度 cnt++
}
if (cnt > maxCnt) {
res = year
maxCn复杂度排序t = cnt
}
}
return res
};复杂度符号

第二题

5751. M数组c言语aximum Distance Between a Pair of Values

首要想到二分法,时间复杂度O(nlogm)O(nlogm)。运用双指针改进后,时间复杂度降到O(m+n)O(m+n)

var maxDistance = function(nums1, nums2) {
let i = nums1.length数组词-1, j = nums2.length-1
let res = 0
while (i>=0) {
while (j>=i&&nums2[j]<nums1[i]) j--
res = Math.max复杂度符号(res, j-i)
i--
}
return res
};

第三题

5752. Maximum Subarray Min-Product

关于nums[i],咱们想知道假定nums[i]是它所在数组中的最小元素,它的成果是多少。那么咱们要知道从nums[i]初步向左第数组词一个小于它的index left[i],以及从nums[i]初步向右第一个小于它的index right[i],那复杂度最优么(left[i], right[i])标明的子数组中的最小数组指针值便是nums[i复杂度剖析],为了便当核算,咱们先预处理复杂度o求出前缀和。关于怎样快速求出left[i]和right[i]复杂度最高的是,咱们运用单调递加栈。详细怎样数组c言语完结不多说,只提供思路,懂的都懂。这题还有一个比较费事数组词的便是数值处理,由于取余的问题竞赛中错了好几次,毕竟改成全程运用bigint才通过。

var max复杂度为nlogn的排序算法SumMinProduct = function(nums) {
const M = 1e9+7
const n = nums.length
let复杂度怎样核算的 sums = [0n]
for (le复杂度怎样核算的t i = 0; i < n; i++) {
sums[i+1] = sums[i]+BigI数组排序nt(nums[i])
}
// 核算出关于每个nums[i],左边第一个小于它的数的index,右边第一个小于它的index (运用单调增栈)
let left = new Array(n).fill(-1), right = new Array(n).fill(n数组函数的使用方法)
let stack = [0]
for (let i = 1; i < n; i++) {
while (stack.length&&nums[stack[stack.length-1]]>=nums[i]) stack.pop()
if (stack.length) left[i] = stack[stac复杂度最高的是k.length-1]
else left[i] = -1
stack.push(i复杂度o(1)什么意思)
}
stack = [n-1]
for (let i = n-2; i &g复杂度最高的是t;= 0; i--) {
while (stack.length&&nums[stack数组排序[stack.length-1]]>=nums[i]) stack.pop()
if (stack.length) right[i] = stack[stack.length-1]
else right[i] = n
stack.push(i)
}
// 遍历nums中每一个元素
let res = 0
for (let i = 0; i < n; i++) {
const t = Big数组排序Int(nums[i])*BigInt(sums[right[i]]-sums[left[i]+1])
if (t>res) res = t
}
return res%BigInt数组指针(复杂度最优M)
};

第四题

5753. La复杂度o(1)什么意思rgest Color Value in a Directed Gr数组c言语ap复杂度最优h

首要是判别是否存在环。关于有向图判别是数组初始化否存在环的办法便是使用拓扑排序,先找到入度为0的结点,然后把该结点指向的结点的入度减一,之后把该结点从图中拿掉;不断重复该进程,假定毕竟图中还有结点说复杂度最优明有环。复杂度o(1)什么意思完结这一步后就要对图进行遍历,找到悉数途径核算最大颜色值。第一主意肯定是dfs,但感觉会超时;我复杂度o复杂度剖析考虑bfs,假定关于结点i,前面悉数指向它的结点都遍历过了,即当时结点i的入度已经变成0了,把前面悉数指向它的结点的信息传给当时结点i。关于每个复杂度结点i,咱们有一个数组,令dp[i] [j]标明关于当时结点i,以它为完毕的悉数途径中色数组词彩j呈现的最多次数。

剖析完了可以看出复杂度最优,判别是否存在环和遍历图这两步可以放在一同,即可以先遍历着,到毕竟遍历完了入度为0的结点后发现还有结复杂度符号点每遍历到就说明有环。

var largestPathVa复杂度olue = function(colors, edges) {
colors = colors.split('').map(c=>c.charCodeAt()-'a'.charCodeAt())
const n = colors.length
// 令dp[node][color]标明以节点node为完毕的悉数途复杂度怎样核算的径上最多有多少个颜色为color的节点
l复杂度排序et dp = new Array(n).fill(null).ma复杂度o(1)什么意思p(d=>new Array(26).fill(0))
for (let i复杂度o = 0; i < n; i++) dp[i][colors复杂度最高的是[i]] = 1
let res = 1
let node数组公式_linkto = new Map()
let inDegree = new Array(n).fill(0)
for (let [node,linkto] of edges) {
if (node_linkto.has(node)) node_linkto.get(node).push(linkt复杂度最优o)
else node_l复杂度inkto.se数组指针t(no数组指针de,[linkto])
in数组Degree[linkto]++
}
let degree0 = []
for (let i = 0; i < n; i++) {
if (inDegree[i]==0) degree0.push(i)
}
let cntRemoved = 0
while (degree0.length) {
const node = degree0.pop()
++cntRemoved
if (node_link数组指针to.has(node)) {
for (const linkto of node_linkto.get(node)) {
for (let color复杂度o = 0; color < 26; c数组词olor++) {
dp[lin数组去重kto][color] = Math.max(dp[linkto][color], dp[node][color]+(colors[linkto]==复杂度最高的是color?1:0))
res = Math.max(dp[linkto][color], res)
}
inDegree[linkto]复杂度排序--
if (inDegree[linkto复杂度为nlogn的排序算法]==0) degree0.push(linkto)
}
}
}
return cntRemoved<n?-1:res
};