首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回给定数组中可能较小的损失。

返回给定数组中可能较小的损失。
EN

Stack Overflow用户
提问于 2021-02-22 01:41:19
回答 1查看 26关注 0票数 0

如何返回给定数组中的小损失?

也许我不是很清楚,让我们来看看两个例子。

给定数组5、10、3,必须返回2(5-3),这是尽可能少的损失。

数组30、10、54、76、1、4、35 必须返回6(10-4),这是尽可能少的损失。

数组大小与给定的数字一样是可变的,但必须返回尽可能少的损失。

到目前为止我的代码是:

代码语言:javascript
运行
复制
function solucao (precos) {
  const newArr1 = []
  const newArr2 = []
  for (let i = 0; i < precos.length; i++) {
    newArr1.push(precos[i])
    newArr2.push(precos[i])
  }
}

我的算法是比较两个数组。但这个解决方案不是最好的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

  • then中过滤结果:丢弃所有正数(因为它不是损失),然后应用绝对(Math.abs),存储在字典arrStartEndNegativeOnly

  • lastly,中,在前一步

的结果中找到最小数目

在做这种家庭作业/考试问题时,我认为最重要的一步是理解这个问题(总结上面的问题)。

代码语言:javascript
运行
复制
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());

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66309017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档