【发布时间】:2014-11-18 00:18:03
【问题描述】:
给定数字 1 到 N 的范围,其中 N >=3。你必须采取 长度为 2N 的数组并放置每个数字(从 1 到 N) 两次。这样一个数字的两个索引之间的距离是 等于数。例子
N=3
(3, 1, 2, 1, 3, 2)
我想到的解决方案如下:
-
生成数字范围的每个排列数组,例如:{1,2,3|、{3,2,1}、{2,1,3} 等。
李> -
对于每个排列数组,运行以下函数:
foreach(int number : permutationArray){ addToResultArray(number); } addToResultArray(int toBeAdded){ for(int i = 0; i < resultArray.length; i++){ //-1 implies the resultArray is empty at that index if(resultArray[i]==-1 && resultArray[i+toBeAdded+1]==-1) resultArray[i] = toBeAdded; } } 如果上述函数没有导致越界异常,那么您有一个有效的解决方案。
我认为这个解决方案不是很好。有人有更好的吗?
【问题讨论】:
-
Does anyone have something better?是的,拿一支笔和一张纸,为N=3直到N=6或N=7建立有效结果,然后找到该分配背后的模式。然后在您的代码中重建该模式。 -
我不相信对于任意 n 存在这样的安排。
标签: java arrays algorithm constraints