给定一个正整数
N
,试求有多少组连续正整数满足所有数字之和为N
?示例 1:
输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。示例 2:
输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 + 4示例 3:
输入: 15 输出: 4 解释: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5说明:
1 <= N <= 10 ^ 9
因为N的大小是1e9,所以必须是O(lgn)的复杂度
因为是连续的整数,所以可以看成是一个等差为1的序列,这个序列的长度的极限是<=sqrt(2*N),因为i是N的因子
我们设置这个序列的最大值是n2,最小值是n1。
根据等差数列求和公式 Sn=(a1+an)*n/2;
所以(n1+n2)*(n2-n1+1)=2*N;
n2=(i+2*N/i-1)/2;
n1=2*N/i-n2;class Solution { public: int consecutiveNumbersSum(int N) { if(N<=2) { return 1; } int ans=1; for(int i=2;i<=(int)sqrt(2*N);i++) { int n2 = (i + 2 * N / i - 1) / 2; int n1 = 2 * N / i - n2; if ((n1 + n2)*(n2 - n1 + 1) == 2 * N) ans++; } return ans; } };
Leetcode 829. 连续整数求和 思维
最新推荐文章于 2024-04-25 09:07:23 发布