javascript - 获取给定系列的倒序数

标签 javascript number-manipulation

我想在 javascript 中获取给定系列的倒序数。如果我有以下系列:

[1,2,2,2,5,5,7,8,8,10]

那么如果输入是数字 8,输出应该是 2,因为:

 1  = 10
 2  = 7
 2  = 7
 2  = 7
 5  = 5
 5  = 5
 7  = 4
[8  = 2]
[8  = 2]
 10 = 1
//--> [1 , 2,3,4, 5,6, 7, 8,9, 10]
  --> [1 , 2,2,2, 5,5, 7, 8,8, 10]
      [10, 7,7,7, 5,5, 4, 2,2, 1 ] <-- // ==> [1,2,2,4,5,5,7,7,7,10]

这是我到目前为止所做的:

function getReverseNumber(arr, num)
{
    var newArr = new Array(arr.length);
    var temp;
    var counter = 1;
    for(var i = arr.length; i > 0; i--)
    {
        if(temp === arr[i])
        {
            newArr[arr.length - i] = counter;
            continue;
        }
        newArr[arr.length - i] = counter;
        temp = arr[i];
        counter++;
    }
    return newArr[num - 1];
}

但它没有按预期工作:

getReverseNumber(new Array(1,2,2,2,5,5,7,8,8,10), 8) // returns 5 not 2

我的功能有什么问题?

最佳答案

我认为你过于复杂了。当您增加 counter 时,您只是将它增加了一个,并且您以相反的顺序放置数字,因此 newArr 最终为 [1,2,2, 3,4,4,5,5,5,6] 而不是 [10,7,7,7,5,5,4,2,2,1]

不需要计算所有这些数字并保存在一个数组中。只需从 1 开始循环,并计算数组中的哪个位置。找到值时返回索引:

function getReverseNumber(arr, num) {
  for (var i = 1; i <= arr.length; i++) {
    if (arr[arr.length - i] == num) return i;
  }
  return -1; // not found
}

演示:http://jsfiddle.net/Xedz6/

关于javascript - 获取给定系列的倒序数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963899/

相关文章:

javascript - 为网站创建用户生成的文本

java - 返回数字的第 n 位数字

Java 位运算(基数排序)

javascript - 以 10 为基数四舍五入

javascript - 通过 jquery 创建的按钮不响应点击

javascript - 无法在 jquery 自动完成中获取所选项目

javascript - 使用正则表达式过滤斜杠之间除数字之外的所有内容

javascript - cv::imcode将图像从JS解码到C++(opencv,emscripten)