改善Java内部for循环的性能

时间:2020-04-15 00:38:25

标签: loops

有人可以帮助改善内部for循环吗?我尝试了许多不同的方法,但无法更快地获得它。我遇到了一个HackerRank问题,并且不断收到一些测试用例的消息,表明测试没有在允许的时间内完成。

function minSum(num, k) {
    console.time("totaltime");
    // Write your code here   
    for (var i = 0; i < k; i++) {
        let maxValue = num[0];
        let maxIndex = 0;
        //maxIndex = num.indexOf(Math.max(...num)); // 3517.743ms
         for (let j = 1; j < num.length; j++) { // 661.414ms
            if (num[j] > maxValue) {
                maxIndex = j;
                maxValue = num[j];
            }
        }
        num[maxIndex] = Math.ceil( num[maxIndex] / 2);        
    }
    console.timeEnd("totaltime");
    return num.reduce((pv, cv) => pv + cv, 0);
}
    const arr = [6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99, 100, 105, 1000, 3000, 5000, 67,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99, 100, 105, 1000, 3000, 5000, 67,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99, 100, 105, 1000, 3000, 5000, 67,
  6, 4, 3, 5, 1, 9, 2, 10, 25, 100, 39, 38 ,17, 0, 44, 99, 100, 105, 1000, 3000, 5000, 67
  ];
const k=950000;
console.log(minSum(arr, k));

0 个答案:

没有答案