当前位置: 首页 > 知识库问答 >
问题:

JavaScript中的Mini-Max和--如何在一个5元素数组中获得4个元素的最小和和最大和

薛坚
2023-03-14

链接到HackerRank挑战

我的想法是遍历数组,每次求和数组中除一个元素外的所有元素,然后求最小和最大和。

function miniMaxSum(arr) {

  let smallestSum = 0;
  let largestSum = 0;

  for (let i = 0; i < arr.length; i++) {
    let chunk = arr.splice(1);
    console.log(chunk);
    if (chunk > largestSum) largestSum = chunk;
    if (chunk < smallestSum) smallestSum = chunk;
  }
  return (smallestSum, largestSum);
}

所以对于给定的[1,2,3,4,5]数组

我应该得到以下可能的“块”:

[2,3,4,5][1,3,4,5][1,2,4,5][1,2,3,5][1,2,3,4]

和最小的块是[1,2,3,4]

我如何调整我的代码来获得给定数组中所有可能的4位数数组,以便我可以比较它们的和,仍然使用for-loop?或者,如果不使用for循环,您还会建议什么?

编辑:现在使用Math.min()Math.max()获取数组中最小和最大的元素。然后使用.filter()删除这些元素以创建新的数组。然后得到这些数组的和。

function miniMaxSum(arr) {

  let smallest = Math.min(...arr);
  let largest = Math.max(...arr);

  let smallestArray = arr.filter(element => element !== largest);
  let largestArray = arr.filter(element => element !== smallest);

  let sumOfSmallestArray = 0;
  let sumOfLargestArray = 0;

  for (let i = 0; i < smallestArray.length; i++) {
    sumOfSmallestArray += smallestArray[i];
  }

  for (let i = 0; i < largestArray.length; i++) {
    sumOfLargestArray += largestArray[i];
  }

  return ([sumOfSmallestArray, sumOfLargestArray]).toString();
}

但是即使它在我的控制台中工作,在HackerRank中就不工作了。

共有1个答案

宋华灿
2023-03-14

关键是首先对数组进行排序,然后最小值将是第一个元素,最大值将是最后一个元素,因此如果你想获得最小值集,它将是没有最高值的数组(最后一个元素),如果你想获得最大值集,它将是没有最低值的数组(第一个元素)。

let data = [1, 3, 2, 4, 5];

// sort first
data = data.sort();
  
// to get the sets only
let maxSet = data.slice(1);
let minSet = data.slice(0, -1);

console.log(minSet, maxSet);

// to get just the max/min value
const sum = data.reduce((a, total) => a + total, 0);
console.log(sum - data[data.length - 1], sum - data[0]);
 类似资料:
  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • O(n^2)算法简单。有没有人对此有更好的算法?

  • 如果我有一个双打数组: 我想得到第一个元素和最后一个元素,这样 我该怎么做?

  • 我无法解决如何选择元素的问题。 所以,我想总的来说 如果我们选择2个连续的元素Arr[i]和Arr[i+1], 然后我们不能从接下来的3个值Arr[i+2]、Arr[i+3]、Arr[i+4]中选择,我们只能从Arr[i+5]中选择 取第4、5和9位的值 即500+900+100=1500 另一个例子: 即700+900+700+500=2800

  • 本节通过求数组的最大和最小值来提高初学者对数组的一些基本应用。 程序运行结果如下: 最高成绩:100 最低成绩:67 将变量 min 与 max 初值设成数组的第 1 个元素后,再逐一与数组中的各元素相比。比 min 小,就将该元索的值指定给 min 存放,使 min 的内容保持最小。同样,当该元素比 max 大时,就将该元素的值指定给 max 存放,使 max 的内容保持最大。for 循环执行完

  • 本文向大家介绍php中删除数组的第一个元素和最后一个元素的函数,包括了php中删除数组的第一个元素和最后一个元素的函数的使用技巧和注意事项,需要的朋友参考一下 对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作。 (1)使用 array_pop 删除数组的