2017-09-14 71 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,編輯;) –