小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。 现在小美想知道,如果那些未知的元素在区间范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少? 共有次询问。
区块链毕设网qklbishe.com为您提供问题的解答
小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。
现在小美想知道,如果那些未知的元素在区间范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少?
共有次询问。
计算数组和可能的最小值,除了 0,不确定的部分之外的和我们可以通过遍历求出,用sum表示;
此外我们用zeroCnt表示值不定的 0 的个数。
给出 和最小值 & 和最大值 计算公式MinSum = sum + zeroCnt * l
MaxSum = sum + zeroCnt * r
时间复杂度O(n + q),n为数组长度,q为查询次数
空间复杂度O(1)
参考代码:
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { // Write your code here let n, q; let nums; const query = []; while(line = await readline()){ let tokens = line.split(' '); if (!n) { n = parseInt(tokens[0]); q = parseInt(tokens[1]); } else if (!nums) { nums = tokens.map((ch)=>parseInt(ch)); } else { query.push(tokens.map((ch)=>parseInt(ch))); } } // console.log(n, q, nums); // console.log(query); // 先求和,同时算下0个数 let zeroCnt = 0; let sum = 0; nums.forEach((v)=>{ if (v === 0){ zeroCnt++; } else { sum += v; } }); query.forEach(([min, max]) => { const minSum = sum + zeroCnt * min; const maxSum = sum + zeroCnt * max; console.log(minSum, maxSum); }); }()
编辑于 今天 11:25:03
以上就是关于问题小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。
现在小美想知道,如果那些未知的元素在区间范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少?
共有次询问。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训