如何返回给定数组中的小损失?
也许我不是很清楚,让我们来看看两个例子。
给定数组5、10、3,必须返回2(5-3),这是尽可能少的损失。
数组30、10、54、76、1、4、35 必须返回6(10-4),这是尽可能少的损失。
数组大小与给定的数字一样是可变的,但必须返回尽可能少的损失。
到目前为止我的代码是:
function solucao (precos) {
const newArr1 = []
const newArr2 = []
for (let i = 0; i < precos.length; i++) {
newArr1.push(precos[i])
newArr2.push(precos[i])
}
}
我的算法是比较两个数组。但这个解决方案不是最好的!
发布于 2021-02-22 09:40:56
总结你的问题:
我们有一个数字数组(有序)。我希望看到“较高索引元素”和“较低索引元素”之间的“最小差异”,但“最小差异”必须是“负数”。
我如何总结:
我们有一个数组或序号。我希望看到“较高索引元素”(loss or gain from buy-then-sell transaction)
和“低索引元素”(buy year, where sell year must be higher than buy year)
之间的“最小差”,但“最小差”(loss or gain from buy-then-sell transaction)
必须是“负数”(because the question ask for a loss, if it's positive number then it is called gain)
。
如何做到:
从列出所有可能的“差异”开始,存储在字典arrStartEnd
arrStartEndNegativeOnly
的结果中找到最小数目
在做这种家庭作业/考试问题时,我认为最重要的一步是理解这个问题(总结上面的问题)。
var arr1 = [5, 10, 3];
var arr2 = [30, 10, 54, 76, 1, 4, 35];
console.log("problem 1: "+JSON.stringify(arr1));
//console.log(arr1);
console.log("problem 2: "+JSON.stringify(arr2));
//console.log(arr2);
function countMinimumLoss(arr) {
// start by listing all possible "difference", stored in dictionary arrStartEnd
var arrStartEnd = {};
for(var i = 0; i < arr.length; i++) {
for(var j = i+1; j < arr.length; j++) {
arrStartEnd["loss"+i.toString()+"to"+j.toString()] = arr[j] - arr[i];
}
}
//console.log(arrStartEnd);
// then filter the result: discard all positive number (since it's not a loss)
var arrStartEndNegativeOnly = {};
for (var key1 in arrStartEnd) {
//console.log(key1);
if(arrStartEnd[key1] < 0) arrStartEndNegativeOnly[key1] = Math.abs(arrStartEnd[key1]);
}
//console.log(arrStartEndNegativeOnly);
// lastly, find the minimal number in the result of previous step
var minimumLoss = 999999;
var minimumKey = null;
for (var key1 in arrStartEndNegativeOnly) {
if(minimumLoss > arrStartEndNegativeOnly[key1]) {
minimumLoss = arrStartEndNegativeOnly[key1];
minimumKey = key1;
}
}
//console.log(minimumKey);
//console.log(minimumLoss);
return minimumLoss;
}
var ans1 = countMinimumLoss(arr1);
var ans2 = countMinimumLoss(arr2);
console.log("answer 1: "+ans1.toString());
console.log("answer 2: "+ans2.toString());
https://stackoverflow.com/questions/66309017
复制相似问题