diff --git a/hands_on/local_maxima_part2/local_maxima.py b/hands_on/local_maxima_part2/local_maxima.py index db89ba3..b2af2b8 100644 --- a/hands_on/local_maxima_part2/local_maxima.py +++ b/hands_on/local_maxima_part2/local_maxima.py @@ -7,4 +7,25 @@ def find_maxima(x): Output: idx -- list of indices of the local maxima in x """ - return [] + idx = [] + # catch the case when input is an empty list + if x == []: + return idx + + # catch the case where a maximum is at the edge + if len(x) > 1: + if x[0] > x[1]: + idx.append(0) + if x[-1] > x[-2]: + idx.append(len(x)-1) + + # if we only have two values, we are done + if len(x) == 2: + return idx + + # other wise for everything not on the edge: + for i in range(1, len(x)-1): + if (x[i] > x[i-1]) & (x[i] > x[i+1]): + idx.append(i) + + return sorted(idx)