剑指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——携程笔试题+知识点总结的更多相关文章

  1. 剑指Offer——顺丰笔试题+知识点总结

    剑指Offer--顺丰笔试题+知识点总结 情景回顾 时间:2016.10.16 19:00-20:40 地点:山东省网络环境智能计算技术重点实验室 事件:顺丰笔试 知识点总结 快排 霍尔排序(快排) ...

  2. 剑指Offer——乐视笔试题+知识点总结

    剑指Offer--乐视笔试题+知识点总结 情景回顾 时间:2016.9.19 15:10-17:10 地点:山东省网络环境智能计算技术重点实验室 事件:乐视笔试   总体来说,乐视笔试内容体量不算少, ...

  3. 剑指Offer——京东校招笔试题+知识点总结

    剑指Offer--京东校招笔试题+知识点总结 笔试感言 经过一系列的笔试,发觉自己的基础知识还是比较薄弱的,尤其是数据结构和网络,还有操作系统.工作量还是很大的.做到精确制导的好方法就是在网上刷题,包 ...

  4. 剑指Offer——CVTE校招笔试题+知识点总结(Java岗)

    剑指Offer(Java岗)--CVTE校招笔试题+知识点总结 2016.9.3 19:00参加CVTE笔试,笔试内容如下: 需要掌握的知识:Linux基本命令.网络协议.数据库.数据结构. 选择题 ...

  5. 剑指Offer——京东实习笔试题汇总

    剑指Offer--京东实习笔试题汇总 编程题1 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B.S其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入 ...

  6. 剑指Offer——联通研究院笔、面试题 (Offer已收割)

    剑指Offer--联通研究院笔.面试题 1.二叉树适宜存储什么样的数据? 树最适合用来表示( C ). A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 ...

  7. 剑指Offer——好未来视频面知识点储备+面后总结

    剑指Offer--好未来视频面知识点储备+面后总结 情景介绍 时间:2016.10.12 13:00- 地点:宿舍 事件:好未来视频面 知识点储备 数据结构 单链表反转 public class Li ...

  8. 《剑指Offer》各面试题总结

    目录 前言 面试题4 二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:斐波那契数列 面试题1 ...

  9. 剑指 offer代码解析——面试题39推断平衡二叉树

    题目:输入一颗二叉树的根结点.推断该树是不是平衡二叉树. 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树. 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度 ...

随机推荐

  1. [SDOI2017]新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  2. [UOJ]#36. 【清华集训2014】玛里苟斯

    题目大意:给n个数字,求子集的异或和的k次方的期望(n<=10^5,k<=5,保证答案小于2^63) 做法:首先如果从集合中拿出a和b,把a和a xor b放回集合,子集的异或和与原来是一 ...

  3. 【USACO17JAN】Promotion Counting晋升者计数 线段树+离散化

    题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...

  4. 【NOIP2012-开车旅行】

    这道题:你不仅要学会两人交换开车,还要做到高效驾驶. ·分析:       在拨开花哨题目的迷雾之后,发现两个重要突破口:       ①从每个点开始,他们的路径是一定的,不存在决策选取.       ...

  5. Spring源码分析(一)--BeanProcessor

    一.何谓BeanProcessor BeanProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码: /* * Copyright 2002-2015 the ...

  6. django rest-framework 4.REST的认证和权限

    目前,我们的API对谁可以编辑或删除代码段没有任何限制.我们想要一些更先进的行为,以确保:(这段话抄自官网) 代码段始终与创建者相关联. 只有身份验证的用户可以创建片段. 只有片段的创建者可以更新或删 ...

  7. WebDNN:Web浏览器上最快的DNN执行框架

    WebDNN:Web浏览器上最快的DNN执行框架 为什么需要WebDNN? 深层神经网络(DNN)在许多应用中受到越来越多的关注. 然而,它需要大量的计算资源,并且有许多巨大的过程来设置基于执行环境的 ...

  8. java集合之ArrayList源码解读

    源自:jdk1.8.0_121 ArrayList继承自AbstractList,实现了List.RandomAccess.Cloneable.Serializable. ArrayList内部是通过 ...

  9. 你知道src、url、href的全称吗?

    url:Uniform Resource Locator统一资源定位符 src:Source资源 href:Hypertext Reference超文本引用

  10. localStorage 存取与删除

    部分转自 http://blog.csdn.net/oo191416903/article/details/64122379 <!DOCTYPE html> <html> &l ...