Hap*_*s31 2 javascript arrays for-loop
我的想法是循环遍历数组,每次将数组中除了一个元素之外的所有元素相加,然后找到最小和和最大和。
我知道.splice()可以从数组中删除任何元素。但目前,使用我的代码,它只从数组中删除一个元素一次。即这只给了我一大块:
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);
}
Run Code Online (Sandbox Code Playgroud)
我需要在每次循环时从数组中删除一个元素,然后从该数组中获取最大和最小和。
所以对于给定的数组[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]
总和最大的块是[2, 3, 4, 5]
总和最小的块是[1, 2, 3, 4]。
如何调整我的代码以获得给定数组中所有可能的 4 位数组,以便我可以比较它们的总和,仍然使用 for 循环?或者如果不使用 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();
}
Run Code Online (Sandbox Code Playgroud)
但即使它在我的控制台中工作,它在 HackerRank 中却不起作用。
关键是首先对该数组进行排序,然后最小值将是第一个元素,最大值将是最后一个元素,因此如果你想获得最小值集,它将是没有最高值(最后一个元素)的数组,如果您想要获得最大值,它将是没有最小值(第一个元素)的数组。
let data = [1, 3, 2, 4, 5];
// sort first
data = data.sort((a, b) => a - b);
// 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]);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11868 次 |
| 最近记录: |