ヒープ
有効な括弧質問
'', '{', '}', '[', ']' のみを含む文字列が与えられた場合、その文字列が有効かどうかを判定します。
有効な文字列を満たす必要があります:
左括弧は同じ種類の右括弧で閉じなければなりません。左括弧は正しい順序で閉じなければなりません。空文字列は有効な文字列とみなすことができることに注意してください。
例1.
入力: "()" 出力:真
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let arr = s.split('');
let tmp = [];
arr.forEach(i => {
let item = tmp[tmp.length - 1];
switch(i) {
case '(':
case '{':
case '[':
tmp.push(i);
break;
case ')':
if (item === '(') {
tmp.pop();
break;
} else {
tmp.push(i);
}
case ']':
if (item === '[') {
tmp.pop();
break;
} else {
tmp.push(i);
}
case '}':
if (item === '{') {
tmp.pop();
break;
} else {
tmp.push(i);
}
default:
break;
}
});
return !tmp.length
};
毎日の気温
毎日の気温リストに基づいて新しいリストを生成してください。対応する位置の出力は、より高い気温が観測されるのを待つ最低日数です。この時点以降も気温が上昇しない場合は、これを0に置き換えてください。
例えば、リスト temperatures = [73, 74, 75, 71, 69, 72, 76, 73] が与えられた場合、出力は [1, 1, 4, 2, 1, 1, 0, 0] となります。
ヒント:温度リストの長さは [1, 30000] の範囲です。各温度値は華氏で、[30, 100] の範囲の整数です。
/**
* @param {number[]} T
* @return {number[]}
*/
var dailyTemperatures = function(T) {
let res = T.map(i => 0);
let st = [];
for (let i = 0; i < T.length; i++) {
while (st.length > 0 && T[i] > T[st[st.length -1]]) {
let t = st.pop();
res[t] = i - t;
}
st.push(i);
}
return res;
};
キュー実装スタック
/**
* Initialize your data structure here.
*/
var MyStack = function() {
this.stack = [];
};
/**
* Push element x onto stack.
* @param {number} x
* @return {void}
*/
MyStack.prototype.push = function(x) {
this.stack[this.stack.length] = x;
return this.stack.length;
};
/**
* Removes the element on top of the stack and returns that element.
* @return {number}
*/
MyStack.prototype.pop = function() {
if (this.stack.length < 1) {
return undefined;
}
let popEle = this.stack[this.stack.length-1];
this.stack.length = this.stack.length - 1;
return popEle;
};
/**
* Get the top element.
* @return {number}
*/
MyStack.prototype.top = function() {
if (this.stack.length < 1) {
return undefined;
}
return this.stack[this.stack.length - 1];
};
/**
* Returns whether the stack is empty.
* @return {boolean}
*/
MyStack.prototype.empty = function() {
return this.stack.length === 0
};
/**
* Your MyStack object will be instantiated and called as such:
* var obj = new MyStack()
* obj.push(x)
* var param_2 = obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.empty()
*/
重複する要素をすべて削除
ソートされた連鎖表が与えられた場合、重複する番号を含むすべてのノードを削除し、元の連鎖表で繰り返し出現しない番号のみを保持します。
例1.
入力:1->2->3->3->4->4->5 出力:1->2->5
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function(head) {
let dummy = new ListNode(-1);
dummy.next = head;
let slow = dummy,
fast = dummy.next;
while(fast) {
while (fast.next && fast.next.val === fast.val) {
fast = fast.next;
}
if (slow.next === fast) {
slow = slow.next;
} else {
slow.next = fast.next;
}
fast = fast.next;
}
return dummy.next;
};



