在数组

时间:2017-07-21 22:25:06

标签: javascript arrays indexing

我正在开展一项挑战,我必须在数组中找到最小的值,并且如果数字出现多次,则能够计算它。我想我的格式有所下降,但它给了我一个计数而不是数字(4而不是3)。谁能给我一些提示?感谢任何帮助!

function small(array) {
  var smallest = array[0];
  var count = 0;
  for(var i = 0; i < array.length; i++) {
    if(array[i] < smallest) {
      smallest = array[i];
    }
    if(smallest===array[i]) {
      count++;
    }
  }
  return count;
}

small([5,6,2,2,2]);

5 个答案:

答案 0 :(得分:4)

每当你获得新的最小值时,都需要重置。

为什么需要将count重置为0而不是1?

因为条件是用最小的=== arr [i]检查,意味着你正在检查你现在存储的相同元素

function small(array){
    var smallest = array[0];
    var count = 0;
    for(var i = 0; i < array.length; i++) {
        if(array[i] < smallest) {
            smallest = array[i];
            count = 0;
        }
        if(smallest===array[i]) {
            count++;
        }
    }
    return count;
 }
 console.log(small([5,6,2,2,2]));

答案 1 :(得分:2)

你可以在这里使用两个循环,首先得到最小的数字然后计算它发生的次数。时间复杂度仍为O(n)。

function small(array){
    var smallest = array[0];
    var count = 0;
    for(var i = 0; i < array.length; i++) {
       if(array[i] < smallest) {
           smallest = array[i];
       }
    }
    for(var i=0; i<array.length; i++){
       if(smallest===array[i]) {
           count++;
       }
    }
    return count;
}
console.log( small([5,6,2,2,2]));

答案 2 :(得分:1)

第一次循环运行时,smallest是数组中的第一个项目,因为这就是你声明它的方式

var smallest = array[0];

所以在第一次迭代中,smallest已经5array[i]也是如此,因为它当前也是array[0],这就是循环开始的地方,所以它们是相同,意味着你的条件在第一次迭代时是正确的,并且计数增加。

你真的是以错误的方式解决这个问题 最简单的方法是使用Math.min查找数组中的最小数字,然后根据该数字过滤数组,并查看剩下多少个索引

function small(arr) {
    let min = Math.min.apply(null, arr);
    return arr.filter(val => val === min).length;
}

console.log(small([5, 6, 2, 2, 2]));

答案 3 :(得分:0)

如果替换count

,则应将smallest设置为0
function small(array){
    var smallest = array[0];
    var count = 0;
    for(var i = 0; i < array.length; i++) {
        if(array[i] < smallest) {
            smallest = array[i];
            count = 0;
        }
        if(smallest===array[i]) {
            count++;
        }
    }
    return count;
}
small([5,6,2,2,2]);

答案 4 :(得分:0)

您将最小值设置为

array[0] 

如果声明说

smallest = array[i]

总是如此。 您需要设置最小值= 0或最小值= 1。