Loading... <div class="tip share">请注意,本文编写于 1393 天前,最后修改于 1375 天前,其中某些信息可能已经过时。</div> # Problem A - [三除数](https://leetcode-cn.com/problems/three-divisors/) ## 方法一:穷举 > 穷举因子即可 ### 比赛中代码: <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-b4a09fb0367760e6e3dd504cbef5aaaf91" aria-expanded="true"><div class="accordion-toggle"><span style="">**C++**</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-b4a09fb0367760e6e3dd504cbef5aaaf91" class="collapse collapse-content"><p></p> ```cpp class Solution { public: bool isThree(int n) { int cnt = 2; for (int i = 2; i < n; ++ i) if (n % i == 0) ++ cnt; return cnt == 3; } }; ``` <p></p></div></div></div> ### 赛后优化代码: <div class="tab-container post_tab box-shadow-wrap-lg"> <ul class="nav no-padder b-b scroll-hide" role="tablist"> <li class='nav-item active' role="presentation"><a class='nav-link active' style="" data-toggle="tab" aria-controls='tabs-60f2f6782b17c5eef391d264b70d958f310' role="tab" data-target='#tabs-60f2f6782b17c5eef391d264b70d958f310'>**C++**</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-cc7e166ec62f411dd8ec6742039fba91451' role="tab" data-target='#tabs-cc7e166ec62f411dd8ec6742039fba91451'>**Python 3**</a></li> </ul> <div class="tab-content no-border"> <div role="tabpanel" id='tabs-60f2f6782b17c5eef391d264b70d958f310' class="tab-pane fade active in"> ```cpp class Solution { public: bool isThree(int n) { int cnt = 2; for (int i = 2; i * i <= n; ++ i) { if (n % i == 0) { ++ cnt; if (i != n / i) ++ cnt; } if (cnt > 3) return false; } return cnt == 3; } }; ``` </div><div role="tabpanel" id='tabs-cc7e166ec62f411dd8ec6742039fba91451' class="tab-pane fade "> ```python class Solution: def isThree(self, n: int) -> bool: cnt = 2 for i in range(2, n): if i * i > n: break if n % i == 0: cnt += 1 if i != n / i: cnt += 1 return cnt == 3 ``` </div> </div> </div> ### 复杂度分析: * 时间复杂度:$O(\sqrt{N})$ * 空间复杂度:$O(1)$ # Problem B - [你可以工作的最大周数](https://leetcode-cn.com/problems/maximum-number-of-weeks-for-which-you-can-work/) ## 方法一:贪心 > 贪心思路:每周选择剩余任务最多的项目,且与上周不同 > > 分析可以发现:只要阶段最多的项目可以完成,那么其他项目都可以完成。若任务最多的项目超过其余项目的总和,那么该项目一定无法完成全部任务。 ### 参考代码: <div class="tab-container post_tab box-shadow-wrap-lg"> <ul class="nav no-padder b-b scroll-hide" role="tablist"> <li class='nav-item active' role="presentation"><a class='nav-link active' style="" data-toggle="tab" aria-controls='tabs-9e5085b562920d620b7a2f8a9d1359e4370' role="tab" data-target='#tabs-9e5085b562920d620b7a2f8a9d1359e4370'>**C++**</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-0def1095961701a12f1229087edd9a48431' role="tab" data-target='#tabs-0def1095961701a12f1229087edd9a48431'>**Python 3**</a></li> </ul> <div class="tab-content no-border"> <div role="tabpanel" id='tabs-9e5085b562920d620b7a2f8a9d1359e4370' class="tab-pane fade active in"> ```cpp class Solution { using LL = long long; public: long long numberOfWeeks(vector<int>& mi) { LL sum = 0, m = 0; for (LL x : mi) sum += x, m = max(m, x); return min(sum, (sum - m) * 2 + 1); } }; ``` </div><div role="tabpanel" id='tabs-0def1095961701a12f1229087edd9a48431' class="tab-pane fade "> ```python class Solution: def numberOfWeeks(self, milestones: List[int]) -> int: s, m = sum(milestones), max(milestones) return min(s, (s - m) * 2 + 1) ``` </div> </div> </div> ### 复杂度分析: * 时间复杂度:$O(N)$ * 空间复杂度:$O(1)$ # Problem C - [收集足够苹果的最小花园周长](https://leetcode-cn.com/problems/minimum-garden-perimeter-to-collect-enough-apples/) ## 方法一:二分+数学  > 观察上图可以发现如下规律: > > 以$(n, n)$为顶点的一圈其边的规律为$2n,2n-1,\cdots,n,\cdots,2n-1,2n$,所以我们以$(n,n)$顶点到下一个顶点有$2\cdot\frac{(n + 2n)\cdot(n + 1)}{2} - n - 2n = 3n^2$,故一圈有$4\cdot3n^2 = 12n^2$个苹果则从$(1,1)$到$(n,n)$共$12\sum_{i = 1}^n{i^2}=2n(n+1)(2n+1)$,其对应周长为$8n$ > > 故可使用二分来枚举其顶点即可 ### 参考代码: <div class="tab-container post_tab box-shadow-wrap-lg"> <ul class="nav no-padder b-b scroll-hide" role="tablist"> <li class='nav-item active' role="presentation"><a class='nav-link active' style="" data-toggle="tab" aria-controls='tabs-f07985e4b01fab79d71274bdeec83af7480' role="tab" data-target='#tabs-f07985e4b01fab79d71274bdeec83af7480'>**C++**</a></li><li class='nav-item ' role="presentation"><a class='nav-link ' style="" data-toggle="tab" aria-controls='tabs-e334aab9fcdd9018b85580888a39e040831' role="tab" data-target='#tabs-e334aab9fcdd9018b85580888a39e040831'>**Python 3**</a></li> </ul> <div class="tab-content no-border"> <div role="tabpanel" id='tabs-f07985e4b01fab79d71274bdeec83af7480' class="tab-pane fade active in"> ```cpp class Solution { using LL = long long; public: long long minimumPerimeter(long long neededApples) { LL l = 1, r = 1e5; while (l < r) { LL mid = (l + r) >> 1; if (2 * mid * (mid + 1) * (2 * mid + 1) >= neededApples) r = mid; else l = mid + 1; } return 8 * l; } }; ``` </div><div role="tabpanel" id='tabs-e334aab9fcdd9018b85580888a39e040831' class="tab-pane fade "> ```python class Solution: def minimumPerimeter(self, neededApples: int) -> int: lo, hi = 1, int(1e5) while lo < hi: mid = (lo + hi) >> 1 if 2 * mid * (mid + 1) * (2 * mid + 1) >= neededApples: hi = mid else: lo = mid + 1 return 8 * lo ``` </div> </div> </div> ### 复杂度分析: * 时间复杂度:$O(\log C)$,其中$C=10^5$ * 空间复杂度:$O(1)$ Last modification:August 18, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 看着给点?(●'◡'●)?
One comment
作者的布局谋篇匠心独运,让读者在阅读中享受到了思维的乐趣。