Javascript 求街道对侧门牌号的一种有效算法
我正试图用JavaScript编写一个有效的算法来解决这个问题。请参阅以下输入数据、正确结果和我的低效解决方案的示例 街道示例Javascript 求街道对侧门牌号的一种有效算法,javascript,algorithm,performance,Javascript,Algorithm,Performance,我正试图用JavaScript编写一个有效的算法来解决这个问题。请参阅以下输入数据、正确结果和我的低效解决方案的示例 街道示例 1| |6 3| |4 5| |2 左侧的奇数门牌号减少,右侧的偶数门牌号增加。门牌号从1开始,无空隙地增加 作为输入,我有一个门牌号(a)和街道长度(n)。我必须找到街对面的门牌号 getOppositeHouse(a, n) getOppositeHouse(1, 3) = 6 getOppositeHouse(3, 3) = 4 getOpposit
1| |6
3| |4
5| |2
左侧的奇数门牌号减少,右侧的偶数门牌号增加。门牌号从1开始,无空隙地增加
作为输入,我有一个门牌号(a)和街道长度(n)。我必须找到街对面的门牌号
getOppositeHouse(a, n)
getOppositeHouse(1, 3) = 6
getOppositeHouse(3, 3) = 4
getOppositeHouse(2, 3) = 5
getOppositeHouse(3, 5) = 8
我当前的解决方案
function getOppositeHouse(a, n) {
let housesL = [], housesR = [];
for (let i = 1; i <= 2 * n; i += 1)
if (i % 2) housesL = [...housesL, i];
else housesR = [i, ...housesR];
if (housesL.includes(a)) return housesR[housesL.indexOf(a)];
else return housesL[housesR.indexOf(a)];
}
函数getOppositeHouse(a,n){
让housesL=[],housesR=[];
对于(设i=1;i相反门牌号之和为常数,等于2n+1
)
1 + 6
3 + 4
5 + 2
因此,您只需从中减去a
,即可得到相反的门牌号:
函数getOppositeHouse(a,n){
console.log(2*n+1-a)
}
getOppositeHouse(1,3)//6
getOppositeHouse(3,3)//4
getOppositeHouse(2,3)//5
getOppositeHouse(3,5)//8
相对房屋编号的总和是常数,等于2n+1
1 + 6
3 + 4
5 + 2
因此,您只需从中减去a
,即可得到相反的门牌号:
函数getOppositeHouse(a,n){
console.log(2*n+1-a)
}
getOppositeHouse(1,3)//6
getOppositeHouse(3,3)//4
getOppositeHouse(2,3)//5
getOppositeHouse(3,5)//8
使用一些数学,而不是循环,例如,如果给定的房屋编号是奇数,我们通过公式(a+1)/2)知道它是街道上的哪栋房屋
,然后考虑到房屋在另一边是相反的,我们需要n-(a+1)/2+1
偶数侧的第栋房屋,它给出了公式(n-(a+1)/2+1)*2
,我们可以对偶数的房屋编号案例使用类似的推理在我的国家,街道两侧的房屋编号以相同的方向增加?@Bergi在逻辑国家;)而不是使用循环使用一些数学,即,如果给出的房屋编号是奇数,我们可以通过公式(a+1)知道街道上是哪栋房屋/2)
,然后考虑到房子在另一边是相反的,我们需要n-(a+1)/2+1
在偶数边的第二所房子,这给了我们公式(n-(a+1)/2+1)*2
,我们可以对偶数的门牌号案例使用类似的推理在我的国家,街道两旁的门牌号以相同的方向增加?@Bergi在逻辑国家。;)