​W​X​G​

hardman

const hardMan = (name: string, isInit = true, queue: Function[] = []) => {
  const nextFunc = () => {
    queue.shift()?.();
  };
  if (isInit) {
    queue.push(() => {
      console.log(`Hi! I am ${name}.`);
      nextFunc();
    });
    setTimeout(nextFunc, 0);
  }
  const nextHardMan = () => hardMan(name, false, queue);
  return {
    study (thing: string) {
      queue.push(() => {
        console.log(`I am studying ${thing}.`);
        nextFunc();
      });
      return nextHardMan();
    },
    rest (delay: number) {
      queue.push(() => {
        setTimeout(() => {
          console.log(`Wait ${delay} seconds.`);
          nextFunc();
        }, delay * 1e3);
      });
      return nextHardMan();
    },
    restFirst (delay: number) {
      queue.unshift(() => {
        setTimeout(() => {
          console.log(`Wait ${delay} seconds.`);
          nextFunc();
        }, delay * 1e3);
      });
      return nextHardMan();
    }
  };
};

打家劫舍2

const djjs = (arr: ReadonlyArray<number>) => {
  const { length } = arr;
  if (length === 0) {
    return null;
  }
  if (length === 1) {
    return arr[0];
  }
  return Math.max(djjsRange(0, length - 2, arr), djjsRange(1, length - 1, arr));
};
const djjsRange = (start: number, end: number, arr: ReadonlyArray<number>) => {
  if (end - start <= 0) {
    return arr[start];
  }
  const dp: number[] = [];
  dp[start] = arr[start];
  dp[start + 1] = Math.max(arr[start], arr[start + 1]);
  for (let i = start + 2; i <= end; i++) {
    dp[i] = Math.max(dp[i - 2] + arr[i], dp[i - 1]);
  }
  return dp[dp.length - 1];
};

打家劫舍3

var rob = function(root) {
    const dfs = (node) => {
        if (node === null) {
            return [0, 0];
        }
        const l = dfs(node.left);
        const r = dfs(node.right);
        const selected = node.val + l[1] + r[1];
        const notSelected = Math.max(l[0], l[1]) + Math.max(r[0], r[1]);
        return [selected, notSelected];
    }
    
    const rootStatus = dfs(root);
    return Math.max(rootStatus[0], rootStatus[1]);
}; 

字符串相加

var addStrings = function(num1, num2) {
    let i = num1.length - 1, j = num2.length - 1, add = 0;
    const ans = [];
    while (i >= 0 || j >= 0 || add != 0) {
        const x = i >= 0 ? num1.charAt(i) - '0' : 0;
        const y = j >= 0 ? num2.charAt(j) - '0' : 0;
        const result = x + y + add;
        ans.push(result % 10);
        add = Math.floor(result / 10);
        i -= 1;
        j -= 1;
    }
    return ans.reverse().join('');
};

最长字符串链

var longestStrChain = function(words) {
    const cnt = new Map();
    words.sort((a, b) => a.length - b.length);
    let res = 0;
    for (const word of words) {
        cnt.set(word, 1);
        for (let i = 0; i < word.length; i++) {
            const prev = word.substring(0, i) + word.substring(i + 1);
            if (cnt.has(prev)) {
                cnt.set(word, Math.max(cnt.get(word), cnt.get(prev) + 1));
            }
        }
        res = Math.max(res, cnt.get(word));
    }
    return res;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值