TypeScript Fish
function fish(a: number[], b: number[]): number {
const size = a.length;
let dead = 0;
const downstream: number[] = [];
for (let i = 0; i < size; i++) {
if (b[i] === 1) {
downstream.push(a[i]);
} else if (downstream.length > 0) {
while (downstream.length > 0) {
dead++;
if (a[i] > downstream[downstream.length - 1]) {
downstream.pop();
} else {
break;
}
}
}
}
return size - dead;
}
This uses a stack for downstream fish and resolves fights only when opposite directions meet.