跳到主要内容

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 '';
}