我試圖解決一個問題:分組號JS算法
問題:
給定的正重複號的數組。輸出 應該得到具有排序右側賠率的陣列和脣上上 左側(沒有特定的順序)
輸入:[4,1,2,3,4]
輸出:[4,2 ,3,1]
在原地解決並且不使用額外空間和O(N)運行時。
代碼:
/*
* Algorithm is simple, have two pointers one on the left and another on the right.
* Note: We are sorting all evens on the left and odds on the right
* If you see even on left, move on else swap.
*/
function groupNumbers(intArr) {
if(intArr.length == 0 || intArr.length == 1){
return intArr;
}
for(let i=0, j =intArr.length-1; i<intArr.length; i++){
if(j>=i){ //elements should not overlap
let start = intArr[i];
let end = intArr[j];
if(start%2 == 0){ //Even
i++;
} else {
[start, end] = [end, start]; //swap
}
if(end%2 == 1){
j--;
} else {
[start, end] = [end, start]; //swap
}
} //if-ends
}//for-ends
return intArr;
}
我不知道我要去哪裏錯了。我錯過了一些東西。我得到與輸出相同的排序數組。
條件: **解決它INPLACE和不使用額外的空間**(優選在一個迭代)
雖然這是一個完全合法的問題,這種事情應該j *關於*從未*在JavaScript中完成。 'Array.prototype.sort'在C++中實現,即使傳入一個自定義的排序函數,它的速度幾乎肯定會比你寫的任何東西都要快。 –
你能解釋一下嗎?爲什麼?當我沒有對任何東西進行排序時,只需使用兩個指針來交換東西。 @JaredSmith在這種情況下請賜教。我想了解更多 – TechnoCorner
有很多稱爲「腳本」語言的語言,但JavaScript真的是*:它是爲了編寫主機環境的腳本。因此,運行JavaScript時會涉及很多開銷,即使它看起來像C:有邊界檢查,原始裝箱/拆箱,與運行時間接口等。並且在某些情況下直接改變數組可能會比*慢製作一個新的,因爲它可以反覆改變「形狀」造成一堆內存分配,而不是可能只是一個來保存新陣列。然後你會遇到大小問題:對於長度爲n的數組,您... –