948. Bag of Tokens
1 | class Solution { |
这道题这么想: 我们可以买token得points, 然后用一个point换一个token等价的power. 不同的token有不同的power. 那这样的话我们用power最便宜的token, 然后得到的points去换最大power的token来得到最多的power, 然后用更多的power买更多的token来换points.
于是我们想到使用sort. 一开始的power如果小于最小的tokens的power, 我们是一个point也得不到的, 直接返回0. 如果不是这样, 那我们的power够我们买若干个tokens, 假设为x个, 那x >= 1. 重复这个过程, 直到我们发现要么left > right, 此时直接得到了结果了; 要么是power不够了, 此时我们用point去到末尾的token换点儿power, 这个末尾token的power是大于等于我们目前买不起的token的, 于是换完后, 我们又可以去买若干个tokens了, 假设为y个, y >= 1. 重复这个过程, 直到left > right.
一个edge case需要注意, 在某个时刻, 我们买不起当前的token, 那么就要往后跑着去换, 如果此时left == right, 即使我们换好我们也没办法买了, 因为当前的token已经被用作换power了, 因此就不能买了. 这个case我们要额外考虑, 这也就是14行的功能.
时间复杂度: O(nlogn) sort需要用.
空间复杂度: O(logn) sort需要用.