当前位置:网站首页>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) 不需要额外申请空间
边栏推荐
- C语言教程(一)-准备
- 分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ
- Paginate the list collection and display the data on the page
- Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
- Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
- 详解扫雷游戏(C语言)
- 数据集划分以及交叉验证法
- Anaconda配置环境指令
- Proteus 8 Professional安装教程
- C语言教程(二)-printf及c自带的数据类型
猜你喜欢

The interviewer asked me TCP three handshake and four wave, I really

有了MVC,为什么还要DDD?

面试官竟然问我怎么分库分表?幸亏我总结了一套八股文

Anaconda配置环境指令

docker安装postgresSQL和设置自定义数据目录

详解扫雷游戏(C语言)

剑指offer基础版 ----- 第28天

关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)

Sword Point Offer Special Assault Edition ---- Day 2

【MySQL8入门到精通】基础篇- Linux系统静默安装MySQL,跨版本升级
随机推荐
关于superset集成到自己的项目中
Redis的初识
uni-app进阶之模版语法与数据绑定【day7】
Interview Redis High Reliability | Master-Slave Mode, Sentinel Mode, Cluster Cluster Mode
Distributed transaction processing solution big PK!
MySQL-Explain详解
MySQL8--Windows下使用压缩包安装的方法
剑指offer专项突击版 --- 第 3 天
Kubernetes 证书可用年限修改
uni-app进阶之认证【day12】
剑指offer专项突击版 ---第 5 天
剑指offer基础版 --- 第24天
Quickly master concurrent programming --- the basics
剑指offer专项突击版 ---- 第 6 天
MySQL8.0.26安装配置教程(windows 64位)
PAT_乙级_真题练习_1007_素数对猜想
对递归的一些感悟
目标检测学习笔记
第7章 网络层第2次练习题答案(第三版)
Linux系统安装mysql(rpm方式安装)