当前位置:网站首页>leetcode-829. 连续整数求和(数论)
leetcode-829. 连续整数求和(数论)
2022-07-31 05:10:00 【lin钟一】
题目链接:https://leetcode.cn/problems/consecutive-numbers-sum/
思路
方法:数论
直接想法
这题求连续正整数,刚好满足等差数列,可以用等差数列求和公式 n = (i + (i + k)) * (k + 1) / 2 其中i是连续正整数的首项,k是尾项和首项的差值
题目给定范围是109
方法一:用枚举i和k 需要O(n2) 肯定超时
方法二:枚举i 和 二分k 需要O(n * logn) 也肯定超时
只能控制时间复杂度在O(n)的时间
所以我们需要用更好的方法求出答案,我们推导等差数列求和公式可以发现
2n = a * b,我们只需要枚举 2n的因子,再通过2i = a - (b - 1)是否满足 2i 为偶数且大于零即可找出答案,但是这样还不够,2n最差时间复杂度需要2 * 10 9 依旧会超时。
我们可以只枚举a, b用n/a代替判断,只需要循环枚举2n的平方根
代码示例
func check(a, b int) bool{
i2 := a - (b - 1)
if i2 & 1 == 1{
return false
}
if i2 <= 0{
return false
}
return true
}
func consecutiveNumbersSum(n int) (ans int) {
n *= 2
sq := int(math.Sqrt(float64(n)))
for i := 1; i <= sq; i++{
if n % i == 0{
if check(i, n / i){
ans++
}
if i != n / i{
if check(n / i, i){
ans++
}
}
}
}
return
}
复杂度分析
- 时间复杂度:O(sqrt(2 * n)) 我们只需要循环枚举根号2n,找出他的所有因子即可
- 空间复杂度:O(1) 不需要额外申请空间
边栏推荐
- The interviewer asked me TCP three handshake and four wave, I really
- 剑指offer专项突击版 ---- 第1天
- 闭包(五)----一个常见的循环
- 剑指offer专项突击版 --- 第 3 天
- Redis的初识
- Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
- Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
- 【MySQL8入门到精通】基础篇- Linux系统静默安装MySQL,跨版本升级
- MySQL (updating)
- C语言实验一 熟悉C程序的环境
猜你喜欢
The process and specific code of sending SMS verification code using flask framework
uni-app进阶之内嵌应用【day14】
Why use Flink and how to get started with Flink?
剑指offer专项突击版 ---- 第 6 天
面试官,不要再问我三次握手和四次挥手
剑指offer基础版 ----- 第28天
Sword Point Offer Special Assault Edition ---- Day 1
分布式事务处理方案大 PK!
剑指offer基础版 ----- 第25天
C语言实验五 循环结构程序设计(二)
随机推荐
Qt Creator + CMake 运行调试总会自动 build 所有目标
Sword Point Offer Special Assault Edition ---- Day 1
uni-app进阶之内嵌应用【day14】
账号或密码多次输入错误,进行账号封禁
Kubernetes加入集群的TOKEN值过期
Refinement of the four major collection frameworks: Summary of List core knowledge
Proteus 8 Professional安装教程
11 【组件通信】
剑指offer专项突击版 ---第 5 天
PAT_乙级_真题练习_1007_素数对猜想
Flink sink ES 写入 ES(带密码)
Flink sink redis writes to Redis
Element concatenation operations in numpy and pytorch: stack, concatenat, cat
uni-app进阶之生命周期【day8】
面试官问我TCP三次握手和四次挥手,我真的是
mysql 的简单运用命令
剑指offer基础版 ----- 第28天
联盟链的真实场景在哪里
uni-app进阶之创建组件/原生渲染【day9】
Redis 事务学习有感