0

我有四个可能相同但或很可能不同的数字。基本上我希望这个函数选择不相等的数量,但如果它们不相等,则选择最低的一个,如果有两个相同,则只选择其中一个并继续。

例如,我有3434339634143374。好吧,我希望函数返回给我说0它们是否都相同,1对于第一个等等。所以在这种情况下我需要被退回4

但如果数字是321, 576, 812,321它会返回给我1

我已经在这里待了几天了,我似乎找不到任何方法来做我需要做的事情。任何人都知道可以使这项工作神奇地工作的东西吗?谢谢!

编辑 我的方法让我按照创建数组排序并尝试使用最后一个结果的方式做一些事情,但是当我对数组进行排序时,键会弄乱所以我不知道它属于哪个值

 var choices = new Array();
 choices[1] = parseInt(value1);
 choices[2] = ...
 choices = choices.sort();
 //and then I ran into the problem that my keys being not starting 
 //with 0, it added an element which I was able to remove by doing this
 choices = choices.splice(0,4);

然后我被困在那里

4

1 回答 1

2

这是回答您问题的旅程的开始。正如其他人所指出的,这段代码并不能处理您提到的所有情况;这是故意的。

如何从数字列表中选择最小的数字?

手卷方式;O(n)一通:

var myList = [3434, 3396, 3414, 3374];
var min = Infinity;
var minIndex = -1;
var current;

for (var i=0; i<myList.length; i++)
{
    current = myList[i];
    if (current < min)
    {
        min = current;
        minIndex = i;
    }
}

// the value you want is in minIndex

更简洁;也O(n)只有两次通过数组:

var min = Math.min.apply(null, myList);
var minIndex = myList.indexOf(min);

NB Array.indexOf在旧版本的 IE 中需要 shim。


基本上我希望这个函数选择不相等的数量

正如他们所说,这个练习留给读者。

于 2012-09-03T03:18:43.367 回答