Dart:Over The Road Execution Timed Out(12000毫秒)如何优化此功能



我需要为Codewars上的Kata编写这个函数,我的函数运行良好,但在大规模随机测试中它会返回"执行超时(12000ms(";。

任务:你刚刚搬进了一条笔直的街道,路的两边都有n栋一模一样的房子。当然,你想知道街道另一边的人的门牌号码。这条街看起来像这样:

Street
1|   |6
3|   |4
5|   |2
you

右侧偶数增加;左边的几率降低了。房屋数量从1开始,并无间隙地增加。当n=3时,1与6相对,3与4相对,5与2相对。

示例(地址,n->输出(给出你的门牌号码地址和街道n的长度,给出街道对面的门牌号。

1, 3 --> 6
3, 3 --> 4
2, 3 --> 5
3, 5 --> 8

关于错误的注意事项//它们在这里警告我:首先是D如果您超时、内存不足或得到任何类型的";错误";,继续阅读。通过200多次随机测试,n和address都可能达到5000亿。如果你试图将5000亿房屋的地址存储在一个列表中,那么你的内存就会耗尽,测试就会崩溃。这不是卡塔问题,所以请不要发布问题。同样,如果测试没有在12秒内完成,那么你也会失败。

要解决这个问题,你需要想一种方法在不制作大量列表或大量循环的情况下进行卡塔。阅读本文以获得灵感:(

我的功能:

```int overTheRoad(int address, int n) {
List<int> evenNumbers=[];
List<int> oddNumbers=[];
List<int>  range= List.generate(n+1, (i) => i + 0);
for( var i in range){
if(i!=0){
final temp=i*2;
evenNumbers.add(temp);
oddNumbers.add(temp-1);
} 
}  
oddNumbers=  oddNumbers.reversed.toList();
return address.isEven? oddNumbers[evenNumbers.indexOf(address)]:evenNumbers[oddNumbers.indexOf(address)];
}
```

我发现这个公式很容易

int overTheRoad(int address, int n) {
return address==1? (n*2):((n*2)-address+1);```


最新更新