829. Consecutive Numbers Sum
Hard
Given a positive integer
N
, how many ways can we write it as a sum of consecutive positive integers?
Example 1:
Input: 5 Output: 2 Explanation: 5 = 5 = 2 + 3
Example 2:
Input: 9 Output: 3 Explanation: 9 = 9 = 4 + 5 = 2 + 3 + 4
Example 3:
Input: 15 Output: 4 Explanation: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5
Note:
1 <= N <= 10 ^ 9
.求等差数列为1,和为N的数列的个数,假设数列的首项为x,项数是m,则如果存在这一数列,N = (x + (x + m - 1)) * m / 2. 那么我们就遍历m的可能性
O(lgN)
ref: https://zhanghuimeng.github.io/post/leetcode-829-consecutive-numbers-sum/
class Solution { public int consecutiveNumbersSum(int N) { int rt = 0; for (int m = 1; ; m++) { int mx = N - (m - 1) * m / 2; if (mx <= 0) break; if (mx % m == 0) rt++; } return rt; } }
No comments:
Post a Comment