我正在开展一项挑战,我必须在数组中找到最小的值,并且如果数字出现多次,则能够计算它。我想我的格式有所下降,但它给了我一个计数而不是数字(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]);
答案 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
已经5
,array[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。