剑指Offer——携程笔试题+知识点总结
剑指Offer——携程笔试题+知识点总结
情景回顾
时间:2016.9.17 19:10-21:10
地点:山东省网络环境智能计算技术重点实验室
事件:携程笔试
总体来说,携程笔试内容与其它企业笔试题类型基本一致,主要分为智能题、选择题、编程题、附加题(编程题)。其实,附加题前面的题目难度还算可以,真正拉开差距的是附加题的编程题。自己当时没有通过附加题,结束后进行一小结。为后序笔试积累经验。
编程题
二分查找
package cn.edu.ujn.practice;
import java.util.Scanner;
public class XC_1 {
/**
* 二分查找
*
* 题目描述:
请写一个二分查找算法查找一个数最先出现的index,如果数不在集合中需要返回(-1)-当前数应该出现的位置。
例如 [1,3,6],查找5,5应该是在index=2的位置但并不在集合中。返回(-1)-2 = -3。
输入
第一行读入一个整数x,表示要查找的数;第二行读入一个正整数n,表示待查找数组的元素个数;第三行读入n个递增整数,构成待查找的数组。
输出
整数x在数组中出现的索引位置(索引从0开始计数);如果不存在,返回(-1)-当前数应该出现的位置。
样例输入
3
5
0 1 3 5 6
样例输出
2
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 待查找的数
int target = in.nextInt();
// 数组长度
int len = in.nextInt();
int [] arr = new int[len];
for(int i = 0; i < len; i++){
arr[i] = in.nextInt();
}
System.out.println(resolution(target, arr, arr.length));
}
private static int resolution(int target, int [] arr, int len){
if(arr == null || arr.length == 0)
return 0;
int er = 0;
return binarySearchRecursion(arr, target, 0, len-1, er);
}
private static int binarySearchRecursion(int arry[],int value,int start,int end, int er)
{
if(start > end)
return -1-er;
int mid = start + (end-start)/2;
if(arry[mid] == value)
return mid;
else if(value < arry[mid])
{
end = mid - 1;
er = mid;
return binarySearchRecursion(arry,value,start,end, er);
}
else
{
start = mid + 1;
er = mid+1;
return binarySearchRecursion(arry,value,start,end, er);
}
}
}
股票利润
package cn.edu.ujn.practice;
import java.util.Scanner;
import java.util.regex.Pattern;
public class XC_2 {
/**
* 股票利润
*
题目描述:
假如一个数组中存储了一个股票在一天交易窗口内各时间点的股票价格(正整数)。
只允许一次买入和一次卖出,请提供一个算法,计算出通过卖出和买入可以得到的最大利润
输入
价格序列,用,号隔开
输出
最大的可能利润
样例输入
2,3,2,4
样例输出
2
*
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Pattern pattern = Pattern.compile("[,]");
// 一天内的股票价格
while(in.hasNextLine()){
String str = in.nextLine();
String [] arr = pattern.split(str);
int len = arr.length;
int [] a = new int[len];
for(int i = 0; i < len; i++){
a[i] = Integer.parseInt(arr[i]);
}
System.out.println(resolution(a, len));
}
}
private static int resolution(int [] arr, int len){
if(arr == null || len == 0)
return -1;
int max = 0;
for(int i = 0; i < len; i++){
for(int j = i; j < len; j++){
if((arr[j]-arr[i]) > max)
max = arr[j]-arr[i];
}
}
return max;
}
}
遍历最短路径长度
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<Integer> s = new ArrayList<Integer>();
List<Integer> rs = new ArrayList<Integer>();
for(int i = 0; i < lines; i++)
s.add(i);
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> li = new ArrayList<Integer>();
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<Integer> pl(List<Integer> s,List<Integer> rs, int [][] arr, ArrayList<Integer> 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<Integer> tmp = new ArrayList<Integer>();
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()等方法。有关其详情请阅读博文《Java进阶(三十九)Java集合类的排序,查找,替换操作》。编程的第一大要义就是DTY(Don not repeat yourself),及不要重复造轮子。况且轮子质量无法保证.....
数据结构一定要吃透,不能遗漏任何知识点。
美文美图
剑指Offer——携程笔试题+知识点总结的更多相关文章
- 剑指Offer——顺丰笔试题+知识点总结
剑指Offer--顺丰笔试题+知识点总结 情景回顾 时间:2016.10.16 19:00-20:40 地点:山东省网络环境智能计算技术重点实验室 事件:顺丰笔试 知识点总结 快排 霍尔排序(快排) ...
- 剑指Offer——乐视笔试题+知识点总结
剑指Offer--乐视笔试题+知识点总结 情景回顾 时间:2016.9.19 15:10-17:10 地点:山东省网络环境智能计算技术重点实验室 事件:乐视笔试 总体来说,乐视笔试内容体量不算少, ...
- 剑指Offer——京东校招笔试题+知识点总结
剑指Offer--京东校招笔试题+知识点总结 笔试感言 经过一系列的笔试,发觉自己的基础知识还是比较薄弱的,尤其是数据结构和网络,还有操作系统.工作量还是很大的.做到精确制导的好方法就是在网上刷题,包 ...
- 剑指Offer——CVTE校招笔试题+知识点总结(Java岗)
剑指Offer(Java岗)--CVTE校招笔试题+知识点总结 2016.9.3 19:00参加CVTE笔试,笔试内容如下: 需要掌握的知识:Linux基本命令.网络协议.数据库.数据结构. 选择题 ...
- 剑指Offer——京东实习笔试题汇总
剑指Offer--京东实习笔试题汇总 编程题1 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B.S其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入 ...
- 剑指Offer——联通研究院笔、面试题 (Offer已收割)
剑指Offer--联通研究院笔.面试题 1.二叉树适宜存储什么样的数据? 树最适合用来表示( C ). A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 ...
- 剑指Offer——好未来视频面知识点储备+面后总结
剑指Offer--好未来视频面知识点储备+面后总结 情景介绍 时间:2016.10.12 13:00- 地点:宿舍 事件:好未来视频面 知识点储备 数据结构 单链表反转 public class Li ...
- 《剑指Offer》各面试题总结
目录 前言 面试题4 二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:斐波那契数列 面试题1 ...
- 剑指 offer代码解析——面试题39推断平衡二叉树
题目:输入一颗二叉树的根结点.推断该树是不是平衡二叉树. 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树. 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度 ...
随机推荐
- [HEOI2015]小Z的房间
Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...
- [Noi2016]区间
题目描述 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一 ...
- Fliptile 翻格子游戏
问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ...
- bzoj 3672: [Noi2014]购票
Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市与它的 ...
- hdu5444(模拟)
题意:建树,给你几个点,要求输出走到各个点的路径(左为E,右为W,树的遍历) 二叉树的模拟题,但是GG了两次. 主要是没注意到直接模拟会爆掉- -,进行下处理就好了 #include <iost ...
- hdu 3433 A Task Process 二分+dp
A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- [51nod1239欧拉函数之和]
来自FallDream的博客,未经允许,请勿转载,谢谢 --------------------------------------------- 给定n,求$S(n)=\sum_{i=1}^{n}\ ...
- SqlServer查询优化方法
MS SQL Server查询优化方法查询速度慢的原因很多,常见如下几种 文章来源http://bbs.csdn.net/topics/250004467 1.没有索引或者没有用到索引(这是查询慢最常 ...
- python2.7入门---操作mysql数据库增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: G ...
- Node.js系列文章:利用console输出日志文件
通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单 ...