代码拉取完成,页面将自动刷新
// /*
// * @Author : helishou
// * @Date : 2021-07-05 15:38:47
// * @LastEditTime : 2021-07-05 15:38:53
// * @LastEditors : helishou
// * @Description :
// * @FilePath : \test.js
// * 你用你的指尖,阻止我说再见,在bug完全失去之前
// */
// 发版效率提升计划
// 详细描述
// 随着 Shopee 业务的不断扩张,项目数量越来越多。为了做到有序发版,小李需要先统计出当前发版的成功率,再做针对性的优化。
// 首先,在不考虑依赖的情况下,项目有两个数据:总发版次数 total、发版失败的次数 fail。我们认为 (total-fail)/total*100% 就是这个项目“自身的成功率”。
// 其次,如果一个项目依赖了多个项目,那么这个项目的成功率应当是:该项目的自身成功率*所有依赖项都成功的概率。
// 整个系统发版的成功率就是:所有最下游(不依赖任何项目)的项目都成功的概率。
// 小李想选择一个项目做优化,把项目的自身成功率增加到 1。他想知道,这最多可以让系统的发版成功率增加到多少。返回的结果请使用 xxx% 的格式,四舍五入保留 6 位小数(注意 JavaScript 中的 toFixed 不是四舍五入,请自行使用 Math.round 来处理)。
// P.S. 我们认为整个系统有 N 个项目,编号分别是 0~N-1。
// 【数据规模】
// 对于 10% 的数据,项目的依赖关系是一条链。
// 对于 30% 的数据,项目不超过 10 个。
// 对于全部数据,项目不超过 50 个,其余数字均小于 10000。
// 其他
// 时间限制: 1000ms
// 内存限制: 256.0MB
// 输入输出示例
// 示例1
// 输入
// 复制
// [1,1,1,1,1],[10,10,10,10,10],[[],[0],[1],[2],[3]]
// 输出
// 复制
// "65.610000%"
// 说明
// 每个项目的发版成功率都是 90%,依赖关系是一条链,因此随意选一个项目将成功率优化成 100%,最终结果都是 1*0.9*0.9*0.9*0.9=0.6561,所以答案是 65.610000%。
// 示例2
// 输入
// 复制
// [1,1,1,1,1],[10,10,10,10,10],[[],[0],[0],[1,2],[3]]
// 输出
// 复制
// "65.610000%"
// 说明
// 跟样例 1 不同,1 和 2 依赖了最上游的项目 0,后面的 3 又依赖了 1 和 2,4 依赖了 3。
// 优化项目 0 是唯一的最优解,此时:
// - 1 和 2 的成功率都是 1*0.9=0.9
// - 3 的成功率依赖于 1 和 2,再乘上自身的成功率 0.9,即 0.9*0.9*0.9=0.729
// - 4 的成功率要再低一些,是 0.6561
// 优化其它项目都只能得到 0.5904,不是最优解。
// console.log(Math.round(1.0000001,6))
// function deploy(failed, total, dependencies) {
// let l=dependencies.length
// let point=new Array(l).fill(0)
// for(let i =0;i<l;i++){
// point[i]=(total[i]-failed[i])/total[i]
// }
// let next=new Array(l).fill(0)
// for(let i =0;i<l;i++){
// next[i]=[]
// }
// for(let i =0;i<l;i++){
// for(let j=0;j<dependencies[i].length;j++){
// next[dependencies[i][j]].push(i)
// }
// }
// console.log(next)
// // write code here
// }
function deploy(failed, total, dependencies) {
let l=dependencies.length
let point=new Array(l).fill(0)
for(let i =0;i<l;i++){
point[i]=(total[i]-failed[i])/total[i]
}
let next=new Array(l).fill(0)
// for(let i =0;i<l;i++){
// next[i]=[]
// }
// for(let i =0;i<l;i++){
// for(let j=0;j<dependencies[i].length;j++){
// next[dependencies[i][j]].push(i)
// }
// }
let rd=new Array(l).fill(0)
for(let i =0;i<l;i++){
// if(dependencies[i].length===0){
// next[i]++
// }
let le=dependencies[i].length
if(!le){
rd[i]=1
}else{
rd[i]=le
}
}
console.log(rd)
for(let i =0;i<l;i++){
for(let j=0;j<dependencies[i].length;j++){
// console.log(i,j,dependencies[i][j])
rd[i]+=rd[dependencies[i][j]]-1
}
}
console.log(rd)
let min=1
let result=1
for(let i =0;i<l;i++){
// if(i!==l-1){
result*=Math.pow(point[i],rd[i])
if(Math.pow(point[i],rd[i])<min){
min=Math.pow(point[i],rd[i])
}
// }else{
// result*=Math.pow(point[i],next[i]+1)
// if(Math.pow(point[i],next[i]+1)<min){
// min=Math.pow(point[i],next[i]+1)
// }
// }
}
// for(let i =0;i<l;i++){
// }
// console.log(result)
let zs=String(result/min*100).split('.')
// return (Math.round(result/min*100000000))/1000000+'%'
return zs[0]+'.'+Math.round(('0.'+zs[1])*1000000)+'%'
// write code here
}
a=deploy([1,1,1,1,1],[10,10,10,10,10],[[],[0],[0],[1,2],[3]])
console.log(a)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。