You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart实现Codewars街道房屋编号函数超时问题及优化需求

问题分析与优化方案

你的代码在小规模测试中能正常运行,但面对n高达5000亿的场景时,内存溢出和超时是必然结果——因为你通过列表存储所有奇偶编号,会占用O(n)的内存,循环遍历和indexOf操作也都是O(n)的时间复杂度,完全无法处理超大规模输入。

核心规律推导

先明确街道的排列逻辑:

  • 街道两侧各有n栋房屋,总共有2n个连续编号(从1到2n)
  • 左侧为奇数编号,按从大到小排列:2n-1, 2n-3, ..., 1
  • 右侧为偶数编号,按从小到大排列:2, 4, ..., 2n

观察对面房屋的编号对应关系:所有正对的两个房屋编号之和是固定值。比如n=3时,1+6=7、3+4=7、5+2=7,这个固定值就是2n + 1。

因此不管输入的address是奇数还是偶数,对面的编号都可以用公式直接计算:(2 * n + 1) - address,完全不需要循环或列表存储。

优化后的Dart代码

int overTheRoad(int address, int n) {
  return 2 * n + 1 - address;
}

验证示例

  • 输入(1, 3):2*3+1 -1 = 6,符合预期
  • 输入(3, 3):7-3 = 4,符合预期
  • 输入(2, 3):7-2 = 5,对应左侧的5,正确
  • 输入(6, 3):7-6 = 1,正确

这个方案的时间复杂度为O(1),空间复杂度也为O(1),无论n多大都能瞬间完成计算,彻底解决超时和内存问题。

内容的提问来源于stack exchange,提问作者hilmiberkayozdemir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:40:29