Javascript:在k个操作之后查找最小和
对数组进行k次操作,以便每次将最大值除以2并向上取整。我需要在这些k操作之后找到它的最小和。k和数组num>1中的所有数字。方法minSum接收一个名为num的数组和一个整数k。对我来说,时间复杂度非常差的野蛮Python代码是:Javascript:在k个操作之后查找最小和,javascript,algorithm,time-complexity,space-complexity,Javascript,Algorithm,Time Complexity,Space Complexity,对数组进行k次操作,以便每次将最大值除以2并向上取整。我需要在这些k操作之后找到它的最小和。k和数组num>1中的所有数字。方法minSum接收一个名为num的数组和一个整数k。对我来说,时间复杂度非常差的野蛮Python代码是: function minSum(arr, k) { // Write your code here let sum = 0; while(k !==0){ let max = Math.max(...arr)
function minSum(arr, k) {
// Write your code here
let sum = 0;
while(k !==0){
let max = Math.max(...arr)
let index = arr.indexOf(max);
max = Math.ceil(max/2);
arr[index] = max;
k--;
}
sum = arr.reduce((a, b) => a + b, 0);
console.log(sum);
return sum;
}
这里也有与python相关的类似问题。
但与Javascript无关
以下是步骤(根据更改为JavaScript之前的第一个需求使用Java):
- 使用最大堆(优先级队列的顺序相反),因此最大值将位于顶部
- 对于k迭代:获取顶部的元素(poll()),执行该操作,然后再次将其添加到max堆
- 最后,只需求和
min sum = 14
注意:您可以使用JavaScript或任何其他编程语言执行完全相同的操作您应该选择一种,Java或JavaScript,两者都是完全不同的语言。然后你应该关注这个问题,你不能做什么你需要做的事情?使用PriorityQueue。最大值将位于顶部。改变它。优先级队列将重新学习自身。重复这个步骤k次。这只需要n个logn+k个logn。最后你可以求和。最小和是什么意思?我添加了一个例子。这是一个javascript问题。Java与Java没有任何关系(或者正如这里的一个人所说,就像“痛苦”与“绘画”的关系一样)。对javascript@ibraI有什么建议吗?一开始你提到Java时!!,不管怎样,javascript的算法都是一样的
const minSum = (arr, k) => {
let newArr = arr
while (k--) {
let max;
let newValue;
let replacingIndex;
max = Math.max.apply(Math, newArr);
newValue = Math.ceil(max / 2);
replacingIndex = newArr.findIndex((value) => value === max);
newArr[replacingIndex] = newValue;
}
return newArr.reduce((a, b) => {a + b})
}
min sum = 14
const minSum = (arr, k) => {
let newArr = arr
while (k--) {
let max;
let newValue;
let replacingIndex;
max = Math.max.apply(Math, newArr);
newValue = Math.ceil(max / 2);
replacingIndex = newArr.findIndex((value) => value === max);
newArr[replacingIndex] = newValue;
}
return newArr.reduce((a, b) => {a + b})
}