Given a stream of financial transactions, write an efficient algorithm to detect anomalies based on rolling statistical windows.
Implement detect_anomalies(transactions, window_size, z_threshold). For each transaction after the first complete preceding window, calculate the window's mean and sample standard deviation. Mark the transaction as anomalous when its absolute z-score is strictly greater than z_threshold. Return anomalous zero-based indices. If the window standard deviation is zero, mark the value anomalous only when it differs from the window mean. Do not evaluate transactions before a complete window exists.
Input values are numeric, window_size is an integer of at least 2, and z_threshold is nonnegative.
def detect_anomalies(transactions, window_size, z_threshold):