栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java&C++题解与拓展——leetcode829.连续整数求和【么的新知识】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java&C++题解与拓展——leetcode829.连续整数求和【么的新知识】

每日一题做题记录,参考官方和三叶的题解

目录
  • 题目要求
  • 思路:数论
    • Java
    • C++
    • Rust
  • 总结

题目要求

思路:数论
  • 连续段之和得到 n n n,那么可以找到一个长度为 k k k的连续段,其首项为 a a a,三者之间满足一些关系以构成答案。
    • 具体来说,由等差数列求和公式得 ( a + a + k − 1 ) × k 2 = n frac{(a+a+k-1)times k}{2}=n 2(a+a+k−1)×k​=n
    • 变换可得, 2 a = 2 n k − k + 1 ≥ 2 2a=frac{2n}{k}-k+1ge 2 2a=k2n​−k+1≥2
    • 也就是说, 2 n k ≥ k + 1 ⇔ 2 n k > k frac{2n}{k}ge k+1Leftrightarrow frac{2n}{k}gt k k2n​≥k+1⇔k2n​>k
    • 即 k k k必然是 2 n 2n 2n的约数,且是较小的那一方,所以枚举 k k k并判断等差数列和即可。
Java
class Solution {
    public int consecutiveNumbersSum(int n) {
        int res = 0;
        n *= 2;
        for(int k = 1; k * k < n; k++) {
            if(n % k != 0)
                continue;
            if((n / k - (k - 1)) % 2 == 0)
                res++;
        }
        return res;
    }
}
  • 时间复杂度: O ( 2 n ) O(sqrt{2n}) O(2n ​)
  • 空间复杂度: O ( 1 ) O(1) O(1)
C++
class Solution {
public:
    int consecutiveNumbersSum(int n) {
        int res = 0;
        n *= 2;
        for(int k = 1; k * k < n; k++) {
            if(n % k != 0)
                continue;
            if((n / k - (k - 1)) % 2 == 0)
                res++;
        }
        return res;
    }
};
  • 时间复杂度: O ( 2 n ) O(sqrt{2n}) O(2n ​)
  • 空间复杂度: O ( 1 ) O(1) O(1)
Rust
  • 换了一个复杂度更低的高赞方式;
  • 1个数时,必然有一个数可构成N
  • 2个数若要构成N,第2个数与第1个数差为1,N减掉这个1能整除2则能由商与商+1构成N
  • 3个数若要构成N,第2个数与第1个数差为1,第3个数与第1个数的差为2,N减掉1再减掉2能整除3则能由商、商+1与商+2构成N
  • 以此类推,当商即第1个数小于等于0时结束
impl Solution {
    pub fn consecutive_numbers_sum(n: i32) -> i32 {
        let mut res = 0;
        let mut k = 1;
        let mut n = n;
        while n > 0 {
            n -= k;
            if n % k == 0 {
                res += 1;
            }
            k += 1;
        }
        res
    }
}
  • 时间复杂度: O ( n ) O(sqrt{n}) O(n ​)
  • 空间复杂度: O ( 1 ) O(1) O(1)
总结

数学理论分析更重要的题。


欢迎指正与讨论!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号