Leetcode MinStack 설계 문제: JavaScript 저수준 솔루션
11842 단어 designalgorithmsjavascript
여기에서는 Javascript의
length
, Math.min()
, push
, pop
등을 사용하는 대신 예상되는 기능을 가능한 한 낮은 수준으로 작성합니다./**
* initialize data structure
*/
var MinStack = function () {
this.stack = [];
this.minVals = [];
this.count = 0;
this.min = Number.MAX_VALUE;
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function (x) {
if (x < this.min || this.count === 0) {
this.min = x;
}
this.minVals[this.count] = this.min;
this.stack[this.count] = x;
this.count++;
};
/**
* @return {void}
*/
MinStack.prototype.pop = function () {
delete this.stack[this.count - 1];
delete this.minVals[this.count - 1];
this.min = this.minVals[this.count - 2];
this.count--;
};
/**
* @return {number}
*/
MinStack.prototype.top = function () {
return this.stack[this.count - 1]
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function () {
if (this.count > 0)
return this.minVals[this.count - 1];
else if (this.count === 0)
return this.MinVals[0]
};
민스택:
length
를 사용하는 대신 this.count
를 사용하여 마지막 인덱스를 설정하고 스택의 마지막 값 값을 얻을 수 있습니다. 푸시(x):
스택에 요소를 추가합니다. 값을 반환하지 않습니다.
여기서 new element(x)를 스택에 추가하는 동안 새 요소가
this.min
값보다 작은지 확인합니다. 또한 스택이 비어 있으면 this.count===0
를 의미하는 경우도 포함합니다. 물론 this.minVals
의 첫 번째 요소도 새 요소(x)와 동일합니다. 스택의 두 길이는 count
값과 같습니다.그런 다음 push() 함수에서 Javascript의 빌드를 사용하는 대신 스택의 마지막 요소가 새 요소라고 말합니다.
...
if (x < this.min || this.count === 0) {
this.min = x;
}
this.minVals[this.count] = this.min;
this.stack[this.count] = x;
this.count++;
팝():
스택에서 마지막 항목을 제거합니다. 우리는 자바스크립트의 pop() 함수를 사용하지 않을 것입니다. 스택에서 마지막 항목을 삭제하기만 하면 됩니다. 제거할 값이 배열의 최소값일 수 있다는 점을 고려해야 합니다. 그래서 실제로
minVals
대신 추가 this.min
스택이 필요한 이유입니다. 스택의 새로운 상태를 파악하려면 minVals
스택의 마지막 항목도 삭제해야 합니다. 하지만!우리는 또한 위에 주어진
push(x)
함수로 스택에 새로운 값을 추가할 때 기억해야 합니다. 거기에서 x 값을 this.min
값과 비교하므로 this.min
값이 더 이상 this.minVals
스택의 마지막 항목이 아니라 이전 항목입니다. 마지막으로 스택에서 마지막 항목을 제거했으므로 카운트 수를 줄여 다음에 다른 작업을 수행할 때 카운트 값이 있는 스택의 마지막 인덱스를 따라야 합니다....
delete this.stack[this.count - 1];
this.min = this.minVals[this.count - 2];
delete this.minVals[this.count - 1];
this.count--;
맨 위():
스택의 마지막 항목을 반환합니다.
여기서 스택의 길이는
this.count
이고 스택의 마지막 항목은 this.count-1
의 인덱스에 있습니다. return this.stack[this.count - 1]
getMin():
스택의 최소값을 반환합니다. 여기에서는 전체 스택을 스캔하는 대신 이미 최소값을 항상
minStack
로 설정했기 때문입니다. minStack의 마지막 항목을 편안하게 반환할 수 있습니다. 마지막 항목의 인덱스는 this.count-1
입니다. 그러나 이미 count=0
에 있다면 minStack의 첫 번째 값을 반환해야 합니다....
if (this.count === 0)
return this.MinVals[0]
else
return this.minVals[this.count - 1];
Reference
이 문제에 관하여(Leetcode MinStack 설계 문제: JavaScript 저수준 솔루션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/definite2/minstack-design-javascript-low-level-2b66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)