Why is my algorithm so slow?

I hope to explore Mathematica by using it for Advent of Code puzzles this year, so spoiler alert for anyone interested in solving https://adventofcode.com/2018/day/1 for themselves.

Part 2 of yesterday’s problem requires you to repeatedly iterate through a list of positive and negative integers, compute the running sum, and terminate when the sum repeats. Here is my code with reference data:

``data = {7, 7, -2, -7, -4}; day1total = 0; day1frequencies = {}; i = 1; While[Not[MemberQ[day1frequencies, day1total]],  day1frequencies = Append[day1frequencies, day1total];  day1total += data[[i]];  i = Mod[i, Length[data]] + 1] day1frequencies day1total ``

This algorithm produces the correct answer (14). When I run this algorithm against the real input ($$|\texttt{data}|=1029$$) this algorithm computed the answer in 141207 iterations, which means $$0\le|\texttt{day1frequencies}|<141207$$ throughout the computation.

This algorithm took several minutes to complete. I wonder if `{}` creates a basic array with $$O(n)$$ searches with `MemberQ`, but I do not know how to prove this. I notice that printing `day1frequencies` preserves insertion order.

I experimented with `day1frequencies = Association[{}]`, hoping searches would occur in $$O(\log{n})$$ or $$O(1)$$, but it didn’t seem any faster.

Why is this algorithm so slow?