這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰算法
即由插入元素的優先級來決定它的位置,而不是按照元素進出的順序排列的。所以元素在插入的時候,還有一個優先級數決定這個元素應該被插到哪裏。應用:就好比咱們生活中有時候會說女士優先、男士優先等,這些都是優先級的體現。數組
插入元素步驟:markdown
封裝元素和優先級放在一塊兒(封裝一個新的構造函數)數據結構
function QueueElement(element, priority) {
this.element = element;
this.priority = priority;
}s
複製代碼
添加元素的時候,將新插入元素的優先級和隊列中已經存在的元素優先級進行比較,獲取這個元素的位置。函數
當這個隊列中沒有元素,或者插入的元素的優先級都比隊列中的元素靠後的,直接push到隊列中便可。post
splice
是一種數組方法。splice(t,v,s)
的t: 被刪除元素的起始位置
;v: 被刪除元素個數
; s: 被插入的新元素
this
splice(i, 0, queueElement)
表示把queueElement
插入到第i個元素後一位。0表示被刪除元素個數爲0.spa
PriorityQueue.prototype.enqueue = function (element, priority) {
var queueElement = new QueueElement(element, priority);
if (this.items.length == 0) {
this.items.push(queueElement);
} else {
var added = false;
for (let i = 0; i < this.items.length; i++) {
if (queueElement.priority < this.items[i].priority) {
this.items.splice(i, 0, queueElement);
added = true;
}
}
if (!added) {
this.items.push(queueElement);
}
}
}
複製代碼
擊鼓傳花prototype
題目:n我的,從第一我的開始,數到m時這我的就被淘汰,接着下一我的從1開始數起。直到最後剩的那一我的獲勝。code
這個題目用隊列的方式能夠很容易的作出來。以前在洛谷刷到過這道題,那時候還沒學到數據結構,如今看卻是容易許多。首先把n我的放到一個隊列中,當尚未數到m時,隊頭元素變成隊尾元素,當數到m時,隊頭元素被淘汰(刪除),這樣子循環下去,最後獲得的結果就是那個獲勝的元素。
function Queue() {
this.items = [];
// 將元素加入到隊列中
Queue.prototype.enqueue = function (e) {
this.items.push(e);
}
// 刪除第一個元素
Queue.prototype.dequeue = function () {
return this.items.shift();
}
}
function passGame(name, num) {
let queue = new Queue();
for (let i = 0; i < name.length; i++) {
queue.enqueue(name[i]);
}
while (queue.items.length > 1) {
for (let i = 0; i < num - 1; i++) {
queue.enqueue(queue.dequeue(name[i]));
}
queue.dequeue(name[0]);
}
let endName = queue.items[0];
console.log(endName);
}
let nameList = ['Lily', 'Mannqo', 'Ytao', 'mama']
passGame(nameList, 6);
複製代碼
整數反轉
這道題我是用了數組的方式(棧的思想),由於棧的元素是先進後出的,我這裏把所給的數字轉換爲字符串以後一個一個壓入棧中,而後再把它一個一個取出來,再轉換爲數字。好比把1,2,3
分別壓入棧中,此時的棧頂就是3,順序出棧的結果就是3,2,1
;最後再根據題目要求返回對應值。
var reverse = function (x) {
let arr = [];
let str = x + '';
let str2 = '';
for (let i = 0; i < str.length; i++) {
arr.push(str[i]);
}
for (let i = 0; i < str.length; i++) {
str2 += arr.pop();
}
let num = parseInt(str2);
if (num < -Math.pow(2, 31) || num > Math.pow(2, 31) - 1) {
return 0
} else if (str[0] == '-') {
return -num;
} else {
return num;
}
};
複製代碼
望大佬們多多指教orz,孩子會好好學的好好學的...