58,web面试测试题
标题
机器人送餐最短路径
58充电堡餐厅为了提升员工就餐体验,研发一个送餐机器人,用于为在线下单的就餐人员送餐。
餐桌分布为一个比较工整的网格图,每一个餐桌座位都是坐标轴上第一象限中的一个整点,如图所示。
员工随意挑选座位后并下单。厨房收集订单信息。由机器人从默认起始位置(0, 0)开始送餐
机器人每1步只能移动一个座位,不能走对角线。机器人可以向x轴正方向,x轴负方向,或者y轴正方向移动1个单位(出于某种原因,机器人不能向y轴的负方向移动)
例如,如果当前时刻机器人所在的坐标为(x, y),下一步机器人可能可以到达的位置为(x + 1, y),(x - 1, y)或者(x, y + 1)。当机器人到达某个餐桌座位时,就餐人员就会立即取餐。一旦机器人分发完所有的饭菜,则表示送餐结束
写一个函数delivery,帮它计算一下送完一次订单最少所需要花费的总步数
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param order int整型二维数组 订单信息
* @return int整型
*/
function delivery(order) {
// 修改订单排序1,
order.sort((a, b) => {
return a[1] - b[1];
});
order.forEach((item, index) => {
if (index > 0 && order[index - 1][0] > item[1]) {
const filerList = order
.filter((itm) => itm[1] == item[1])
.sort((a, b) => b[0] - a[0]);
order.splice(index, filerList.length, ...filerList);
}
});
let stepNum = 0;
order.forEach((item, index) => {
if (index === 0) {
stepNum = item[0] + item[1];
} else {
let lastStep = order[index - 1];
let xStep =
item[0] - lastStep[0] > 0
? item[0] - lastStep[0]
: lastStep[0] - item[0];
let yStep = item[1] - lastStep[1];
stepNum = stepNum + xStep + yStep;
}
});
console.log("stepNum==>", stepNum);
return stepNum;
}
module.exports = {
delivery: delivery,
};
//自测
delivery([[1, 1], [1, 2], [2, 2], [1, 3], [3, 3], [2, 6]])
自测:
我的代码测试出来的步数是12;可是最终的答案是10.我百思不得其解,也没有找到对应的答案;暂且记下来,希望以后得到解答