https://leetcode.com/problems/maximum-profit-in-job-scheduling/discuss/409009/JavaC++Python-DP-Solution/368880
greedy is a specific kind of DP, and DP is a general greedy. greedy -> local optimization dp -> global optimization
QuickSelect: time complexity: O(n), worst case: O(n ^ 2)
https://stackoverflow.com/questions/56940793/quickselect-time-complexity-explained
Math.pow(x, y) time complexity: O(log2(y))