乍一看,一道简单题为什么如此复杂,主要是函数体有点复杂,理解题意但想了半天不会写,后来看了下题解恍然大悟,原来是这个意思,确实是一道简单题
= =、
var CQueue = function() {
this.stack1 = [];
this.stack2 = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.stack1.push(value);
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if(!this.stack2.length&&!this.stack1.length){
return -1;
}else if(!this.stack2.length){
while(this.stack1.length){
this.stack2.push(this.stack1.pop());
}
}
if(this.stack2.length){
return this.stack2.pop();
}
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
斐波那契数列 经典滑动数组方法
时间复杂度On
空间复杂度O1
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
let arr = [0,1];
if(n==0){
return 0;
}else if(n==1){
return 1;
}
for(let i=0;i<=n;i++){
arr[2]=arr[0]+arr[1];
arr[2] =arr[2]%(1e9+7)
arr.push(arr.shift());
}
return arr[2];
};
/**
* @param {number} n
* @return {number}
*/
var numWays = function(n) {
let arr = [1,1];
if(n==0){
return 1;
}else if(n==1){
return 1;
}
for(let i=0;i<=n;i++){
arr[2]=arr[0]+arr[1];
arr[2] =arr[2]%(1e9+7)
arr.push(arr.shift());
}
return arr[2];
};
同样的解法,只是把结果前移一次,LeetCode题库有一道原题,之前做过一次了