649.Dota2参议院
链接:649.Dota2参议院
难度:Medium
标签:贪心、队列、字符串
简介:给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。
题解 1 - typescript
- 编辑时间:2020-12-12
- 执行用时:80ms
- 内存消耗:39.3MB
- 编程语言:typescript
- 解法介绍:[参考链接](https://leetcode-cn.com/problems/wiggle-subsequence/solution/bai-dong-xu-lie-by-leetcode-solution-yh2m/)。
function predictPartyVictory(senate: string): string {
  const l = senate.length;
  const arr = new Array(l).fill(1);
  const check = (c: string) => () => arr.every((v, i) => (senate[i] === c ? true : v === 0));
  const checkR = check('R');
  const checkD = check('D');
  const setNext = (i: number, c: string) => {
    for (let j = i + 1; j < l; j++) {
      if (senate[j] === c && arr[j] === 1) {
        arr[j] = 0;
        return;
      }
    }
    for (let j = 0; j < i; j++) {
      if (senate[j] === c && arr[j] === 1) {
        arr[j] = 0;
        return;
      }
    }
  };
  while (true) {
    for (let i = 0; i < l; i++) {
      if (arr[i] === 0) continue;
      if (senate[i] === 'R') {
        if (checkR()) return 'Radiant';
        setNext(i, 'D');
      } else {
        if (checkD()) return 'Dire';
        setNext(i, 'R');
      }
    }
  }
  return '';
}