2019-09-27 22:39:24
总体感受:这次比赛心态不够好,最后导致没有很好的完成比赛。
注意点:
1)保持心态稳定,是情商的体现;
2)hard题的覆盖还是明显不够;
- 1201. Ugly Number III
问题描述:
问题求解:
本体中的数据规模已经决定了使用O(n)的解法是肯定会超时的。那么自然而然就是使用二分查找了。
这里有个地方需要注意的是数字超过limit,需要转成long进行计算。
另外,二分以后一律采用模版lower_bound计算。
public int nthUglyNumber(int n, int a, int b, int c) { int l = 0; int r = (int)(2 * 1e9); while (r - l > 1) { int mid = l + (r - l) / 2; int num = get_cnt(mid, a, b, c); if (num >= n) r = mid; else l = mid; } return r; } private long gcd(long x, long y) { return y == 0 ? x : gcd(y, x % y); } private long lcm(long a, long b) { return a * b / gcd(a, b); } private int get_cnt(long n, long a, long b, long c) { return (int)(n / a + n / b + n / c - n / lcm(a, b) - n / lcm(a, c) - n / lcm(b, c) + n / lcm(a, lcm(b, c))); }