我需要为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);```