剑指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. [HNOI 2002]跳蚤

    Description Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个 ...

  2. Codeforces 812E Sagheer and Apple Tree

    大致题意: 给你一颗树,这个树有下列特征:每个节点上有若干个苹果,且从根节点到任意叶子节点的路径长度奇偶性相同. 甲和乙玩(闲)游(得)戏(慌). 游戏过程中,甲乙轮流将任意一个节点的若干个苹果移向它 ...

  3. bzoj 3277: 串

    Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身). Solution 出现 \(k ...

  4. [BZOJ]1069: [SCOI2007]最大土地面积

    题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积.(n<=2000) 思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlo ...

  5. 例10-11 uva11181

    题意:n个人去逛超市,第i个人买东西的概率是pi,,计算每个人实际买了东西的概率 思路: 搜索标处理所以的情况,得出所有概率和all(开始天真的以为是1 - -,就说怎么案例看着怪怪的),用tt[i] ...

  6. 【集训第四天·继续刷题】之 lgh怒刚ypj

    继续水题,终于完全掌握了伸展树了,好心痛QAQ. 1.codevs1343 蚱蜢 区间最大值查询+单点移动 最大值查询维护一个mx数组就行,单点移动么,先删除在插入 CODE: /* PS: 比较ma ...

  7. .Net及C#基础知识,面试宝典

    作为你一.Net和C#开发这些知识,你是否掌握了,你是否算的上一名入门的程序员? 技术不行并不可怕,可怕的是你不知道自己还需做哪一方面的提升,本篇文字本人的一些面试时所经常涉及的问题,并且在网上收集了 ...

  8. HttpClient 实现 get,post请求

    private String sendPost(Map<String,Object> data, String url) { CloseableHttpClient httpClient ...

  9. SCNN车道线检测--(SCNN)Spatial As Deep: Spatial CNN for Traffic Scene Understanding(论文解读)

    Spatial As Deep: Spatial CNN for Traffic Scene Understanding 收录:AAAI2018 (AAAI Conference on Artific ...

  10. Redis从入门到精通:初级篇

    原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...