2020携程旅游前端笔试题
题目1:生成和遍历二叉树
题目描述:
已知有平面坐标系的十组坐标点[[x1,y1], [x2,y2], ……, [x10,y10]],每次找出距离最近的两组坐标进行合并,合并后的坐标取两者平均值,即[(x1+x2)/2 , (y1+y2)/2](如有小数统一向下取整,即2.4取2),合并后的新坐标作为二叉树根节点,原坐标取X值较小的作为左节点,另一个为右节点,假设第一次计算后得出[x1,y1], [x2,y2]距离最近,且x1<x2,则构成如下二叉树:
[(x1+x2)/2, (y1+y2)/2]/ \/ \[x1, y1] [x2, y2] [x3, y3] [x4, y4] ……[x10, y10]
合并后的新坐标和余下没有在二叉树中的原始坐标构成新数组[[(x1+x2)/2, (y1+y2)/2], [x3,y3],[x4, y4] ……, [x10,y10]]继续重复上述步骤,直至二叉树构建完成,最后按前序优先输出二叉树的数组,假设只有3组坐标的话,可能的一种二叉树场景为:
[(((x1+x2)/2)+x3]/2, (((y1+y2)/2)+y3]/2]/ \/ \[(x1+x2)/2, (y1+y2)/2] [x3,y3]/ \/ \[x1, y1] [x2, y2]
注:
两点之间距离的平方公式:(x1-x2)²+(y1-y2)²
输入描述
表示平面坐标系中坐标点的二维数组,如int a[10][2]
输出描述
前序遍历后的二叉树数据
样例输入
[[5,10], [3,15], [10,18]]
样例输出
7,15
4,12
3,15
5,10
10,18
解题思路:(AC 25%)
var arr = [[5, 10],// [3, 15],// [10, 18],
];
var root = null;
function Node(value) {this.value = value;this.left = null;this.right = null;
}
// 计算距离最近的两个点,添加两种的中点,删除原来的点
function oneHandle(arr, node) {// console.log("***");var min = Infinity;var newItem = [];var delete1 = 0;var delete2 = 0;for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++) {var dis =Math.pow(arr[i][0] - arr[j][0], 2) + Math.pow(arr[i][1] - arr[j][1], 2);// console.log(dis);if (dis < min) {min = dis;newItem.push(Math.floor((arr[i][0] + arr[j][0]) / 2));newItem.push(Math.floor((arr[i][1] + arr[j][1]) / 2));delete1 = i;delete2 = j;}}}var newNode = new Node(newItem);if (!node) {if (arr[delete1][0] < arr[delete2][0]) {newNode.left = new Node(arr[delete1]);newNode.right = new Node(arr[delete2]);} else {newNode.left = new Node(arr[delete2]);newNode.right = new Node(arr[delete1]);}} else {if (node.value[0] == arr[delete1][0]) {if (arr[delete1][0] < arr[delete2][0]) {newNode.left = node;newNode.right = new Node(arr[delete2]);} else {newNode.left = new Node(arr[delete2]);newNode.right = node;}} else {if (arr[delete1][0] < arr[delete2][0]) {newNode.left = new Node(arr[delete1]);newNode.right = node;} else {newNode.left = node;newNode.right = new Node(arr[delete1]);}}}root = newNode;arr.splice(delete2, 1);arr.splice(delete1, 1);arr.push(newItem);// console.log(root);// console.log(arr);
}function handle() {if (arr.length == 1) {root = new Node(arr[0]);}while (arr.length > 1) {oneHandle(arr, root);// console.log(arr);}
}
handle();
// console.log(root);
function traverse(node) {if (!node) return null;console.log(node.value.toString());traverse(node.left);traverse(node.right);
}
traverse(root);
题目2:数组排序+栈
题目描述:
输入一个数组,排除掉非数字类型和负数的元素后,对数组中剩余的元素进行排列组合,求出组合后的最大数值。
输入描述
输入一个数组数组
输出描述
输出这个数组排列的最大值
样例输入
[1,0,2,3]
样例输出
3210
解题思路:(AC 60%)
// var arr = [1, 0, 2, 3, -22, "aa", { name: "99" }, [12, 3]];
var arr = [1];
arr = arr.filter((item) => {return item >= 0 && typeof item == "number" && !Number.isNaN(item);
});
arr.sort((a, b) => a - b);
console.log(arr);
var str = "";
while (arr.length > 0) {str += arr.pop();
}
console.log(str);
题目3:
题目描述:
携程为庆祝中秋节,举办了中秋晚会,在晚会活动中有一个词语对对碰环节。该环节要求参赛选手两两组队,每队由其中一人A提出词型,另外一人B根据词型给出相匹配的答案,匹配成功进入下一轮。
请帮助主办方设计一个算法识别B给出的答案是否能够匹配A提出的词型。
**要求:**答案只能是纯英文字母,不同单词间以空格分隔,如果输入的内容中含有数字、中文或特殊符号等,直接返回-1。已知判定字符串是否是纯英文字母或空格的正则为:"1+$"
输入描述
输入数据,两个单词之间以空格分隔,举例:
A提出:ABAC词型 B回答:jin sheng jin shi(ABAC),B回答正确,输出1
A提出:ABCD词型 B回答:xiao xin yi yi(ABCC),B回答错误,输出0
A提出:AABC词型 B回答:人 人 you ze(有中文),B回答错误,输出-1
输出描述
回答正确输出1,回答错误输出0,程序异常或回答中有非英文内容,输出-1
样例输入
ABAC
jin sheng jin shi
样例输出
1
解题思路:(AC60%)
var str = "ABAC";
var answer = "人 人 you ze";
function handle(str) {if (!/^[A-Za-z ]+$/.test(str)) {// console.log(-1);return;}var questionObj = {};for (var i = 0; i < str.length; i++) {if (questionObj[str[i]]) {questionObj[str[i]].push(i);} else {questionObj[str[i]] = [];questionObj[str[i]].push(i);}}var arr = answer.split(" ");var answerObj = {};for (var i = 0; i < arr.length; i++) {if (answerObj[arr[i]]) {answerObj[arr[i]].push(i);} else {answerObj[arr[i]] = [];answerObj[arr[i]].push(i);}}// console.log(questionObj);// console.log(answerObj);var tag = 0;var arr1 = [];var arr2 = [];for (var i in questionObj) {arr1.push(questionObj[i]);}for (var i in answerObj) {arr2.push(answerObj[i]);}return arr1.toString() == arr2.toString() ? 1 : 0;
}
var rs = handle(str);
console.log(rs);
A-Za-z ↩︎
2020携程旅游前端笔试题相关推荐
- 携程产品经理笔试题-2020秋招
题型:20道英文选择题+2道简答题 选择题部分主要考察的数量关系.材料分析和语言理解,跟行测差不多,但是我没想到是全是英文的,天哪,太久没看英文字母了,看得让我很跳跃,显然基本凉凉了... 简答题1: ...
- 小红书2020校招前端笔试题卷三
小红书2020校招前端笔试题卷三题目地址 第一题 第一题我做错了以为是选错误的 第二题 第三题 解: JS中的执行机制(setTimeout.setInterval.promise.宏任务.微任务), ...
- 携程android开发面试题,2017携程笔试题目
携程是我国著名的旅游为主的网站,想进入携程工作吗?小编为大家整理了2017携程笔试题目,欢迎阅读参考! 2017携程Web前端实习生招聘笔试题 考察encodeURI encodeURI(), dec ...
- 2020携程“BOSS直播”大数据发布:GMV累计超11亿
今日,2020携程"BOSS直播"大数据报告(以下简称<报告>)正式对外发布.<报告>结合大量最新披露的数据,从携程直播体系的整体情况.用户特征.核心(直播 ...
- 干货 | 携程机票前端安卓虚拟机测试集群建设实践
作者简介 Liang,携程研发总监,关注DevOps,前端&服务端质量保障.能效提升: Tony,携程资深测试经理,关注自动化测试框架及平台类工具开发. 一.背景 在携程内部业务高频率敏捷迭代 ...
- 前端笔试题面试题记录(上)
前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢.如果喜欢的话可以点波赞,或者关注一 ...
- 也许你需要点实用的-Web前端笔试题
之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...
- 前端笔试题小结(一)
前端笔试题小结(一) 2020-03-13 题目一: 将一个js数组去重. 样例: 输入:[ 1, "apple", 3, "a", 3, 1, 5, 6, & ...
- 前端笔试题面试题记录(下)
前言 接上篇前端笔试题面试题记录(上).趁清明小长假,把上篇剩下的部分也写一下,因为最近比较忙这篇已经拖了很久了.现在刚刚开始银四了,应该还是有些小伙伴在找工作,时间还不算太晚,希望本篇可以帮到这些小 ...
最新文章
- 网络规划与设计讨论会(第3期)
- 第七周实践项目3 负数把正数赶出队列
- Ubuntu20.04开机界面(boot animation)改成Windows95
- memcpy/memset函数的c语言实现
- Java中BigDecimal类介绍及用法
- 优秀!303篇论文获2020年度“优秀博士学位论文”!
- 本田2022年新车将搭载谷歌Automotive OS
- 外媒:日本和芬兰将合作开发6G技术 诺基亚将参与其中
- android float类型保留两位小数_你知道MySQL中Decimal类型和Float Double的区别吗?
- VB键码常数(速查)
- Android Studio 智能感知无效
- 3.微服务设计 --- 如何建模服务
- linux下688权限,Linux shell脚本笔记
- 文件系统以及硬盘分区概念
- 小米4C官方/第三方ROM下载
- Rasa开发使用 Rasa_NLU及Rasa_Core模型训练与测试
- ROOT(a Data analysis Framework)-Note4: iSTEP day1-TH1TF1
- pika rabbitmq ssl
- v-rep仿真之键盘控制机械臂末端移动
- 2019 沉淀-留言-成长的小白菜