Java Fish
import java.util.ArrayDeque;
import java.util.Deque;
public class Solution {
public static int fish(int[] a, int[] b) {
int size = a.length;
int dead = 0;
Deque<Integer> fish = new ArrayDeque<>();
for (int i = 0; i < size; i++) {
if (b[i] == 1) {
fish.push(a[i]);
} else if (!fish.isEmpty()) {
while (!fish.isEmpty()) {
dead++;
if (a[i] > fish.peek()) {
fish.pop();
} else {
break;
}
}
}
}
return size - dead;
}
}
This uses a stack for downstream fish and resolves fights only when opposite directions meet.