一、二叉树相关题目
二、超出数组长度一半的数组元素
function MoreThanHalfNum_Solution(numbers){
let out = 0;
let obj = {};
let length = numbers.length / 2;
numbers.forEach(item => {
!obj[item] ? obj[item] = 1 : obj[item]++
});
for(let [key, value] of Object.entries(obj)) {
if(value > length ) {
out = key;
}
}
return out;
}
三、斐波那契、跳台阶
function Fibonacci(n){
if(n0||n1) {
return n;
}
let a=0,b=1,c;
for(let i=2;i<=n;i++){
c = a+b;
a = b;
b = c;
}
return c;
}
https://www.cnblogs.com/evenleee/p/8474465.html
四、 js 模拟call、apply、bind实现
https://www.cnblogs.com/mengfangui/p/10502962.html
1、 js 模拟call
//f.call(o)其原理就是先通过 o.m = f 将 f作为o的某个临时属性m存储,然后执行m,执行完毕后将m属性删除。
// o.m=f;
// o.m();
// delete o.m;
Function.prototype.myCall = function (context) {
var context = context || window
// 给 context 添加一个属性
context.fn = this
// 将 context 后面的参数取出来
var args = [...arguments].slice(1)
var result = context.fn(...args)
// 删除 fn
delete context.fn
return result
}
2、js模拟apply
Function.prototype.myApply = function (context) {
var context = context || window
context.fn = this
var result
// 需要判断是否存储第二个参数
// 如果存在,就将第二个参数展开
if (arguments[1]) {
result = context.fn(...arguments[1])
} else {
result = context.fn()
}
delete context.fn
return result
}
3、js模拟bind
模拟bind函数:
var sun={
name:&#