Javascript:在k个操作之后查找最小和

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)

对数组进行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)
        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})
}