网易首页 > 网易号 > 正文 申请入驻

2026-07-21:可由多种立方和构造的整数。用go语言,给定一个正整数上限 n,一个正整数 x 被称为“好整数”,当且仅当它可以表示为两组不

0
分享至

2026-07-21:可由多种立方和构造的整数。用go语言,给定一个正整数上限 n,一个正整数 x 被称为“好整数”,当且仅当它可以表示为两组不同的正整数对 (a, b) 的立方和,其中 a 和 b 都是正整数且满足 a ≤ b。换句话说,存在至少两种不同的 (a, b) 组合,使得 x = a³ + b³。现在需要找出所有不超过 n 的好整数,并将它们按从小到大的顺序以列表形式返回。

1 <= n <= 1000000000。

输入: n = 4104。

输出: [1729,4104]。

解释:

在小于等于 4104 的整数中,好整数包括:

1729:1³ + 12³ = 1729,以及 9³ + 10³ = 1729。

4104:2³ + 16³ = 4104,以及 9³+ 15³ = 4104。

因此,答案是 [1729, 4104]。

题目来自力扣3890。

大体步骤如下: 一、预计算阶段(init函数) 1. 确定枚举范围

  • • 上限mx = 1_000_000_000

  • • 对于a,从1开始枚举,直到a³ > mx/2为止。
    为什么是mx/2?因为我们要找a³ + b³ ≤ mxa ≤ b,当本身就超过mx/2时,即使最小的b = a,和也会超过mx,所以无需继续枚举。

2. 双层循环枚举所有(a, b)组合
  • • 外层循环枚举a,内层循环枚举b(从a开始,保证a ≤ b)。

  • • 内层循环终止条件是a³ + b³ > mx,一旦超过就break内层循环。

  • • 对每一对(a, b),计算x = a³ + b³,并在一个哈希表cnt中统计该值出现的次数。

3. 筛选好整数
  • • 遍历哈希表cnt,对于出现次数c > 1x,说明它至少可以由两组不同的(a, b)表示,因此将其加入goodIntegers列表。

  • • 这里没有存储具体组合,只关心出现次数是否大于 1。

4. 排序
  • • 用slices.SortgoodIntegers从小到大排序,以便后续二分查找。

备注:题目描述提到“两组不同的正整数对”,代码中当c > 1即判定为好整数。这是正确的,因为枚举时保证了a ≤ b,所以同一个x如果有多个计数,必然对应不同的(a, b)组合(组合无序但已通过a ≤ b规范表示)。

二、查询阶段(findGoodIntegers函数) 1. 二分查找

  • • 调用sort.SearchInts(goodIntegers, n+1),在已排序的goodIntegers中查找第一个大于n的元素的下标i

  • • 由于goodIntegers是升序的,所有下标< i的元素都≤ n

2. 返回结果
  • • 返回切片goodIntegers[:i],即所有不超过n的好整数,已经是有序的。

三、主函数中的示例
  • n = 4104,调用findGoodIntegers(4104)得到[1729, 4104],并打印。

四、复杂度分析 1. 预计算的时间复杂度
  • • 外层循环a的范围:a³ ≤ 5e8(即mx/2),所以a最大约∛(5e8) ≈ 793

  • • 内层循环b的范围:对于每个aba开始,直到b³ ≤ mx - a³
    总枚举的(a, b)对的数量大约是所有满足a ≤ ba³ + b³ ≤ 1e9的组合数。

  • • 这是一个二维区域内的整点数,量级可以通过积分估计:

    • • 条件a³ + b³ ≤ 1e9,且1 ≤ a ≤ b

    • • 令u = a³, v = b³,则u + v ≤ 1e9,且u ≤ vuv是立方数。

    • • 直接枚举点对数量级约为O(N^(2/3)),这里N = 1e9,所以N^(2/3) = (1e9)^(2/3) = 1e6级别。

  • • 实际上这样的整数对数量大约是几十万到一百万左右。每次计算a³ + b³和哈希表操作为 O(1),所以预计算的总时间在可接受范围内,记为O(M),其中 M 是满足条件的(a, b)对的数量(约 10^5 ~ 10^6)。

2. 预计算的空间复杂度
  • • 哈希表cnt存储所有可能的a³ + b³值,不同值的数量小于等于 M,也是O(M)

  • goodIntegers存储出现次数 >1 的值,数量远小于 M(题目提到共 1554 个),可视为 O(G),G 是好整数数量。

  • • 整体额外空间复杂度为O(M)

3. 单次查询的时间复杂度
  • • 只有一次二分查找:sort.SearchInts时间复杂度O(log G),G ≈ 1554,几乎常数时间。

  • • 空间复杂度:返回切片可直接引用全局数组的部分,没有额外分配,O(1)额外空间。

总结:

  • 总时间复杂度:预计算 O(M)(约 10^5 ~ 10^6 级别),单次查询 O(log G)(几乎常数)。

  • 总额外空间复杂度:O(M),主要是哈希表存储所有不同立方和的计数。

Go完整代码如下:

package main

import (
"fmt"
"slices"
"sort"
)

var goodIntegers []int// 1554 个

func init() {
const mx = 1_000_000_000
cnt := map[int]int{}
for a := 1; a*a*a <= mx/2; a++ {
for b := a; a*a*a+b*b*b <= mx; b++ {
cnt[a*a*a+b*b*b]++
}
}

for x, c := range cnt {
if c > 1 {
goodIntegers = append(goodIntegers, x)
}
}

slices.Sort(goodIntegers)
}

func findGoodIntegers(n int) []int {
i := sort.SearchInts(goodIntegers, n+1)
return goodIntegers[:i]
}

func main() {
n := 4104
result := findGoodIntegers(n)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

def init_good_integers():
"""初始化好整数列表,这些数可以用至少两种方式表示为两个立方数之和"""
mx = 1_000_000_000
cnt = {}
a = 1
while a * a * a <= mx // 2:
b = a
while a * a * a + b * b * b <= mx:
val = a * a * a + b * b * b
cnt[val] = cnt.get(val, 0) + 1
b += 1
a += 1
good_integers = []
for x, c in cnt.items():
if c > 1:
good_integers.append(x)
good_integers.sort()
return good_integers

def find_good_integers(n, good_integers):
"""返回所有不大于 n 的好整数"""
result = []
for x in good_integers:
if x <= n:
result.append(x)
else:
break
return result

def main():
good_integers = init_good_integers()
n = 4104
result = find_good_integers(n, good_integers)
print(result)

if __name__ == "__main__":
main()

C++完整代码如下:

  





using namespace std;

vector goodIntegers;

// 全局初始化器
namespace {
struct InitGoodIntegers {
InitGoodIntegers() {
const int mx = 1'000'000'000;
unordered_map cnt;

for (int a = 1; a * a * a <= mx / 2; a++) {
for (int b = a; a * a * a + b * b * b <= mx; b++) {
int val = a * a * a + b * b * b;
cnt[val]++;
}
}

for (const auto& [x, c] : cnt) {
if (c > 1) {
goodIntegers.push_back(x);
}
}

sort(goodIntegers.begin(), goodIntegers.end());
}
} initGoodIntegers;
}

vector findGoodIntegers(int n) {
auto it = upper_bound(goodIntegers.begin(), goodIntegers.end(), n);
int idx = distance(goodIntegers.begin(), it);
return vector (goodIntegers.begin(), goodIntegers.begin() + idx);
}

int main() {
int n = 4104;
vector result = findGoodIntegers(n);

cout << "[";
for (size_t i = 0; i < result.size(); i++) {
cout << result[i];
if (i < result.size() - 1) {
cout << ", ";
}
}
cout << "]" << endl;

return 0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
下饭菜这么多,山姆和开市客为什么选了饭扫光?——最严苛渠道的"排名验证"

下饭菜这么多,山姆和开市客为什么选了饭扫光?——最严苛渠道的"排名验证"

湛江日报
2026-08-07 15:03:39
别再乱买贵手机!8月三款性价比神机,512GB用四年不换机

别再乱买贵手机!8月三款性价比神机,512GB用四年不换机

辉哥说动漫
2026-08-08 01:36:31
中行行长许超凡:逃亡美国17年,为逃命让妻子嫁老外生三个孩子

中行行长许超凡:逃亡美国17年,为逃命让妻子嫁老外生三个孩子

大鱼简科
2026-07-31 22:01:43
六七十年代没空调没电扇,三伏天人们凭啥熬过来?

六七十年代没空调没电扇,三伏天人们凭啥熬过来?

天气观察站
2026-08-06 01:10:55
长沙老板被打最新!俩恶霸被刑拘,官媒通报细节,舆论反扑受害者

长沙老板被打最新!俩恶霸被刑拘,官媒通报细节,舆论反扑受害者

阿莱美食汇
2026-08-07 00:09:27
夫妻本是同林鸟,但抱歉,这次刘嘉玲也救不了原形毕露的梁朝伟

夫妻本是同林鸟,但抱歉,这次刘嘉玲也救不了原形毕露的梁朝伟

兵鉴史
2026-08-07 12:20:56
一年狂赚786亿,吞并18个村庄,村长身家165亿,他们是干啥的

一年狂赚786亿,吞并18个村庄,村长身家165亿,他们是干啥的

商业人物志
2026-07-10 08:30:51
67岁王朔晚年现状:独居北京、5病缠身,每天都要吃一根哈根达斯

67岁王朔晚年现状:独居北京、5病缠身,每天都要吃一根哈根达斯

皮皮电影
2026-07-04 12:53:47
两年前劝家人赶紧卖房,长辈却坚持自住跌了无所谓,270万的房子如今只剩一百万

两年前劝家人赶紧卖房,长辈却坚持自住跌了无所谓,270万的房子如今只剩一百万

捣蛋窝
2026-08-06 22:46:53
解气!17岁赵松源罚点后向对手门将做闭嘴手势 此前失点后被其挑衅

解气!17岁赵松源罚点后向对手门将做闭嘴手势 此前失点后被其挑衅

风过乡
2026-08-07 23:09:22
两性关系:很多男人不知道,女人五十五岁后,最渴望的是这三件事

两性关系:很多男人不知道,女人五十五岁后,最渴望的是这三件事

喵咪文化
2026-06-27 08:34:20
打不过,就拉援助

打不过,就拉援助

寰宇大观察
2026-08-07 13:22:11
心理测试:你最欣赏哪一朵花?测你这一生注定要交什么顶级好运

心理测试:你最欣赏哪一朵花?测你这一生注定要交什么顶级好运

风起见你
2026-08-06 13:02:15
三枚导弹精准命中,俄军精准斩首乌克兰,乌军核心层一夜凋零

三枚导弹精准命中,俄军精准斩首乌克兰,乌军核心层一夜凋零

青青衫书生
2026-08-07 16:19:11
杨颖韩国拍广告回沪生图曝光,状态太能打了?

杨颖韩国拍广告回沪生图曝光,状态太能打了?

东方不败然多多
2026-08-06 10:04:08
去医院别傻坐干等叫号!老护士私下说3个窍门再也不会白熬一下午

去医院别傻坐干等叫号!老护士私下说3个窍门再也不会白熬一下午

荷兰豆爱健康
2026-08-07 00:39:06
六代丰田荣放外观机甲感十足!不足17万很亲民,还有三套动力可选

六代丰田荣放外观机甲感十足!不足17万很亲民,还有三套动力可选

小史谈车
2026-08-06 11:24:55
除了性生活,就是打麻将!2000多县城普通人的生活现状只能这样?

除了性生活,就是打麻将!2000多县城普通人的生活现状只能这样?

流史岁月
2026-07-06 18:00:06
中国电信很多年没见过这么严峻的形势了

中国电信很多年没见过这么严峻的形势了

林子说事
2026-07-14 06:14:57
克林顿:我后悔让乌克兰放弃核武器,其次是让中国加入世贸组织

克林顿:我后悔让乌克兰放弃核武器,其次是让中国加入世贸组织

战域笔墨
2026-07-19 06:34:29
2026-08-08 03:27:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1380文章数 78关注度
往期回顾 全部

科技要闻

突然涨价,"只收电费钱"的梁文锋,变了吗

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

头条要闻

2岁患儿就诊死亡首诊医生获刑 不少医生为其鸣不平

体育要闻

去年信誓旦旦3000万 今年NBA查无此人

娱乐要闻

周也热恋结束,六个字暴露单身状态

财经要闻

腾讯WorkBuddy领跑AI办公 阿里字节急了?

汽车要闻

越7全球首秀 传祺开始进攻方盒子越野

态度原创

教育
本地
亲子
数码
公开课

教育要闻

【资讯】广东省初中历史新教材省级培训举行

本地新闻

课本里的童年,绍兴正上演

亲子要闻

西蒙小小班结束,在家整整折磨了我们两天。丈母娘还以为休息两天继续上课呢

数码要闻

苹果旗舰台式机Mac Pro迎来20周年纪念 淘汰停产已有五个月

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版