我想撰寫一個演算法來洗掉重復項并在 javascript 中使用單回圈對陣列進行排序。我想用演算法而不是宣告性方法來做。我可以用單個回圈對其進行排序,但不能洗掉重復項。如果有人幫助我,我會很高興。
陣列元素個數為10^6,每個元素等于或大于0,小于300
這是我的排序演算法:
var a = [2, 7, 5, 1, 3, 2, 7];
for (let i = 0; i < a.length - 1; i ) {
if (a[i] > a[i 1]) {
let temp = a[i]
a[i] = a[i 1]
a[i 1] = temp
i = -1
}
}
console.log(a)
uj5u.com熱心網友回復:
很榮幸,即使在面試之后,你也有足夠的好奇心去嘗試找到解決方案。對程式員來說是個好兆頭。
- 我會使用一個物件來跟蹤任何重復項。
- 也從最后回圈,主要是因為感覺正確,而不是弄亂索引。
- 在
aif 中改變位置current < previous - 否則添加到物件。
- 檢查物件是否有
previous索引,或者 - 檢查當前是否與先前相同(例如陣列末尾的 8、8)
- 然后拼接上一個索引。
- 添加
numberOfLoops只是因為知道它很有趣。
var a = [2, 2, -1, 8, 5, 1, 3, 3, 13, 2, 8, 8];
var temp = {}; // 1
var result = [];
var current, previous;
var numberOfLoops = 0;
for (let i = a.length - 1; i > 0 ; i--) { // 2
current = a[i];
previous = a[i - 1];
numberOfLoops ; // 8
if (temp.hasOwnProperty(previous) || // 5
current == previous) { // 6
a.splice(i - 1, 1); // 7
// i ;
} else if (current < previous) { // 3
a[i - 1] = current;
a[i] = previous;
i = 2;
delete temp[current];
} else { // 4
temp[current] = current;
}
}
console.log({numberOfLoops}); // 23
console.log(a); // [-1, 1, 2, 3, 5, 8, 13]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405598.html
標籤:
上一篇:在Julia中對結構陣列進行排序
