我正在解决一个要求左移数组 n 次的黑客排名问题,并且得到了预期的结果,但由于答案错误(可能是内存问题(,它在 11 种情况下有 4 种失败,你能想到更好的方法来做到这一点吗?
编辑:根据我正在使用数组移位的建议,我不是以前的,因为我认为它会重新索引并导致更多的内存问题,但它是完全相同的。
编辑2:多亏了@Jonnix几乎解决了。它在 1 次测试中仍然失败,由于超时而终止。
function rotLeft($a, $d) {
foreach(range(0, $d - 1) as $i) {
$t = array_shift($a);
array_push($a, $t);
}
return $a;
}
因超时而终止
输入(标准(
73642 60581
908888 969919 799300 901951 255276 696355 167087 447070 100192 879605 273189 736167 984114 565175 989598 557719 171743 729843 461287 815447 776346 610493 743338 722359 700113 723637 790698 122612 874093 993027 314757 924083 451408 111579 883698 530181 888470 862009 401154 60835 274262 297891 96545 891826 565600 343788 642324 287742 154175 647468 136827 965823 752310 744010 223629 462104 272196 720116 32096 511381 818593 39651 636768 938154 857984 430874 85908 897528 959117 953574 61214 873801 914158 206684 758393 641809 463300 682463 746363 654765 790633 934489 834514 10725 987056 83710 992969 687851 648105 276047 656129 937306 508444 134930 466874 739769 190795 198044 302153 78584 350450 154569 57185 441968 527048 942400 320076 148837 491901 562929 784433 806212 794492 860312 957069 20327 226920 491129 929211 234957 418528 56483 115374 310244 765564 503407 917300 158977 232335 92416 613106 458276 428965 959875 653100 772791 338884 26478 37307 715533 52780 533250 571542 52069 726169 576777 983436 {-truncated-}
预期产出
232566 654587 128941 991824 11612 144834 143716 164919 722762 129879 416739 295757 322523 548122 785121 122389 752627 881219 926081 885199 624960 146790 290382 255217 952381 328752 450367 628528 478700 290409 857010 305014 54361 883569 416497 474666 942427 535044 491122 549293 83156 966776 926928 479193 903726 572 252373 94146 955549 954137 455666 547638 4193 414130 25538 74238 41922 423045 239244 510877 435028 699816 629312 937101 221747 545039 595447 198983 901637 26946 748468 650105 299517 195369 588391 77903 450515 447362 293990 63532 813262 882150 589619 642607 401340 609673 451835 608241 798326 799417 497875 703683 85087 224156 787643 523058 525411 980212 993948 707717 792954 696348 144331 492987 380324 704201 355589 503374 117099 236939 467507 892084 805414 129355 172517 856730 438770 312909 418264 926121 517497 243181 752178 506500 101676 189859 875714 993477 161354 547585 428738 224964 242201 338225 475159 576018 381417 679737 494733 238967 395606 406904 356829 345145 535620 737128 358824 666007 8532{-truncated-}
您可以先修改数组长度,如果数组长度大于数组长度n
这将节省大量工作。然后将n % array_length
中的第一个移动到尾部一次。查看演示
function rotLeft($a, $d) {
$d = $d % count($a);
$tail = array_splice($a,0,$d);
return array_merge($a, $tail);
}