LeetCode 5187. 收集足够苹果的最小花园周长(式子化简,二分)
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 5187. 收集足够苹果的最小花园周长(式子化简,二分)相关的知识,希望对你有一定的参考价值。
题意:
解法:
∑ i = − n n ∑ j = − n n ∣ i ∣ + ∣ j ∣ 每 个 i 会 被 加 ( 2 n + 1 ) 次 , j 也 是 , 因 此 : = ( 2 n + 1 ) ∗ ( ∑ i = − n n ∣ i ∣ ) ∗ 2 ∑ i = − n n ∣ i ∣ 的 部 分 可 以 用 等 差 数 列 公 式 计 算 . \\sum_{i=-n}^n\\sum_{j=-n}^n|i|+|j|\\\\ 每个i会被加(2n+1)次,j也是,因此:\\\\ =(2n+1)*(\\sum_{i=-n}^n |i|)*2\\\\ \\sum_{i=-n}^n |i|的部分可以用等差数列公式计算. i=−n∑nj=−n∑n∣i∣+∣j∣每个i会被加(2n+1)次,j也是,因此:=(2n+1)∗(i=−n∑n∣i∣)∗2i=−n∑n∣i∣的部分可以用等差数列公式计算.
二分式子中的n,根据式子可以O(1)判断是否满足要求,总复杂度O(log).
code:
#define ll long long
class Solution {
public:
ll f(ll n){
return n*(n+1)/2;
}
ll cal(ll n){
return (n*2+1)*(f(n)*2)*2;
}
long long minimumPerimeter(long long n) {
ll ans=0;
ll l=0,r=1e5;
cout<<cal(55)<<endl;
while(l<=r){
ll mid=(l+r)/2;
if(cal(mid)>=n)ans=mid,r=mid-1;
else l=mid+1;
}
return ans*2*4;
}
};
以上是关于LeetCode 5187. 收集足够苹果的最小花园周长(式子化简,二分)的主要内容,如果未能解决你的问题,请参考以下文章