携程笔试题+知识点总结
【摘要】 情景回顾时间:2016.9.17 19:10-21:10地点:山东省网络环境智能计算技术重点实验室事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题类型基本一致,主要分为智能题、选择题、编程题、附加题(编程题)。其实,附加题前面的题目难度还算可以,真正拉开差距的是附加题的编程题。自己当时没有通过附加题,结束后进行一小结。为后序笔试积累经验。编程题二分查找package cn.edu....
情景回顾
时间:2016.9.17 19:10-21:10
地点:山东省网络环境智能计算技术重点实验室
事件:携程笔试
总体来说,携程笔试内容与其它企业笔试题类型基本一致,主要分为智能题、选择题、编程题、附加题(编程题)。其实,附加题前面的题目难度还算可以,真正拉开差距的是附加题的编程题。自己当时没有通过附加题,结束后进行一小结。为后序笔试积累经验。
编程题
二分查找
股票利润
遍历最短路径长度
package cn.edu.ujn.practice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;
public class XC_3 {
/**
* 遍历最短路径长度
*
题目描述:
暴风降临的龙母丹妮莉丝·坦格利安要骑着她的龙以最快的速度游历各国,她的谋士们纷纷献策规划路线。
作为她的谋士之一和仰慕者的你,决定冒险穿越到21世纪借助计算机来寻求最优路线。
请设计一段程序,读取各国两两之间的距离,距离以邻接矩阵表示,并计算出遍历各国的最短路径长度。
输入
第一行:国家数量,假设为n
后续n行是国家间距离的邻接矩阵表示
输出
遍历各国的最短路径长度
样例输入
4
0,1,2,3
1,0,4,5
2,4,0,2
3,5,2,0
样例输出
5
思路: 组合 --> 最小值
TC: O(n!)
SC: O(n)
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Pattern pattern = Pattern.compile("[,]");
// 获取国家数
int lines = in.nextInt();
int [][] arr = new int [lines][lines];
// 缓冲输入--Key
in.nextLine();
for(int i = 0; i < lines; i++){
int k = 0;
String s = in.nextLine();
String [] str = pattern.split(s);
int len = str.length;
for(int j = 0; j < len; j++){
arr[i][k++] = Integer.parseInt(str[j]);
}
}
/*for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println(" ");
}*/
List s = new ArrayList();
List rs = new ArrayList();
for(int i = 0; i < lines; i++)
s.add(i);
ArrayList list = new ArrayList();
ArrayList li = new ArrayList();
li = pl(s, rs, arr, list);
System.out.println("");
for(Integer c : li){
System.out.print(c + " ");
}
System.out.println("");
System.out.println("最短路径:" + Collections.min(li));
}
private static ArrayList pl(List s,List rs, int [][] arr, ArrayList list){
int cost = 0;
// 递归出口
if(s.size() == 1)
{
rs.add(s.get(0));
// System.out.println(rs.toString());
for(int i = 0; i < rs.size()-1; i++){
cost += arr[rs.get(i)][rs.get(i+1)];
}
if(!list.contains(cost)){
list.add(cost);
}
System.out.print(cost + " ");
rs.remove(rs.size()-1);
}else{
for(int i = 0; i < s.size(); i++){
rs.add(s.get(i));
List tmp = new ArrayList();
for(Integer a:s)
tmp.add(a);
tmp.remove(i);
pl(tmp, rs, arr, list);
rs.remove(rs.size()-1);
}
}
return list;
}
}
经验
赛码网、牛客网上的考试,编程题均可以本地编译,故相关代码应提前准备好,这就要求自己之前进行过大量的编程练习。待使用相关算法时,可以直接进行CV操作。其实编程最主要的还是思想。前2道编程题很容易想到,也很容易实现。甚至直接使用暴力解法也不会出现TO异常。相比于前两道题,第三题就要考察自己的编程思想功底了。 对于一些数组元素操作,要学会使用Java中的工具类,例如Collections工具类就很好用。经常会用到其sort()、reverse()、max()、min()、replaceAll()、frequency()、binarySearch()等方法。有关其详情请阅读博文《》。编程的第一大要义就是DTY(Don not repeat yourself),及不要重复造轮子。况且轮子质量无法保证.....
数据结构一定要吃透,不能遗漏任何知识点。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)