2017-09-14 69 views
0

你好我在一个编码挑战中被困在一个边缘案例中:如果有人能够提供帮助,会很好;在最高和最低版本上需要帮助(codewars)

在这个小小的任务中,您会得到一串空格分隔的数字,并且必须返回最高和最低数字。

例子:

highAndLow("1 2 3 4 5"); // return "5 1" 
highAndLow("1 2 -3 4 5"); // return "5 -3" 
highAndLow("1 9 3 4 -5"); // return "9 -5" 

注:

所有的数字都是有效的Int32,没有必要对其进行验证。 输入字符串中始终至少有一个数字。 输出字符串必须是由一个空格分隔的两个数字,最高的数字是第一个数字。

这是我在Javascript代码:

function highAndLow(numbers){ 
    numbers2=numbers.split(' '); 
    var highest =parseInt(numbers2[0]); 
    var lowest =parseInt(numbers2[0]); 
    if (numbers2.length==1) { 
    return numbers; 
    } 
    else { 
    for (i=0;i<numbers2.length;i++) { 
     if (parseInt(numbers2[i])>highest) { 
     highest = parseInt(numbers2[i]); 
     } 
     else if (parseInt(numbers2[i])<lowest) { 
     lowest = parseInt(numbers2[i]); 
     } 
    } 
    } 
    return(highest + " " + lowest); 
} 

我可以通过17次测试,但我坚持上预期'42 42' ,因为我回来‘42’,这是令人费解给我。任何帮助表示赞赏:]

+0

什么号码,你路过这导致一个问题?你能给个例子吗? –

回答

1

我想你应该只需要添加<=>=代替><所以两个条件都满足

0

你也可以做到这一点通过排序数组,然后选择第一个和最后一个元素来自排序的数组。

function highestAndLowest(nums) { 
    let numbers = nums.split(' '); 
    let sorted = numbers.sort(function (a, b) { 
    return Number(a) - Number(b); 
    }); 
    return sorted[0] + " " + sorted[sorted.length - 1]; 
} 

https://jsbin.com/farapep/edit?js,console

这可以更快取决于浏览器类型的实现中,阵列的大小和数组的初始顺序。

+1

如果你声称它的速度更快,证明它... –

+0

@Jonasw你是对的,我没有证据就提出了这个要求。在进一步研究之后,有各种各样的因素可能会使其更快或更慢,具体取决于数组的大小,浏览器对实现进行排序以及数组的初始顺序。我已经更新了这个答案。 – kyle

+0

如果for循环得到了很好的优化,我们得到了OPs代码的O(n)和你的O(2n)。但是你是对的,浏览器优化可以让人惊讶...... –

0
if (numbers2.length==1) { 
    return numbers; 
} 

这意味着如果只是“42”通过,则返回“42”。这不是必需的。只要删除它,它应该工作。我怎么会写:

function getMaxMin(numbers){ 
    numbers = numbers.split(" "); 
    return Math.max(...numbers) +" "+ Math.min(...numbers); 
} 

或代码有点美化:

function getMaxMin(numbers){ 
    var max,min; 
    numbers = numbers.split(" "); 
    for(var num of numbers){ 
    if(!max || num > max) max = num; 
    if(!min || num < min) min = num; 
    } 
    return max+" "+min; 
} 
+1

忘记了转换,就像'“.map(n => + n)',因为你得到了一个有效的数字输入,Int32(它适用于'min' /'max'),即使你必须一个转换,那么你可以把'Number'作为回调。 –

+0

@nina thanks,编辑;) –