asymptotic notation (big-o), cliffnotes
big-o (originally an omicron) is a way of analysing the runtime it takes the algorithm to execute as the input size grows.
polinormial
- the common 
x(y)we have learnt in school can be represented asO(n), where thenis a single variable. Example:sum(nums). it will be longer, because we need to loop through the arguments. heapq.heapify(nums)and sliding-window algorithms (optimizing by updating results incrementally rather than recalculating from scratch for each window) runsO(n).
    ^
time|              ●
    |           ●
    |         ●
    |      ●
    |   ●
    |●_____________> input
O(1)- no matter how much the input size grows, the time is constant. Example:nums.append(5)
     ^
time |                                         
     |                    
     |                    
     | ● ● ● ● ● ●
     |_____________>
               input
-O(n^2). Example: iterating though a 2-dimensional array or iterating though an n-sized array n times.
    ^
time|          ●
    |        ●
    |      ●
    |    ●
    |  ●
    |●_____________> input
O(logn): log n is usually applied to the binary search. with each iteration, we eliminate half of the components.2^x = n.xis the number of times we can take the array and divide it by2. for very large imput sizes,O(logn)is almost the same asO(1). the difference betweenO(logn)andO(n)is massive.
non-polinormial
O(2^n)O(n!), comes up mostly in permutations