剑指Offer——迅雷笔试题+知识点总结
剑指Offer——迅雷笔试题+知识点总结
情景回顾
时间:2016.9.19 19:00-21:00
地点:山东省网络环境智能计算技术重点实验室
事件:迅雷笔试
总体来说,迅雷笔试内容体量不算多,主要分为30道选择题,2道编程题,半小时将选择题做完,1个半小时两道编程题一道29%,一道超时。关键是第二道编程题直接输出错误语句居然通过17%!也是醉了,绝对的判题系统BUG。
知识点回忆
希尔排序
给定一数组元素{50,40,95,20,15,70,60,45},经过一趟希尔排序(参考博文《剑指Offer--排序算法小结》)后,数组元素变为
[15 40 60 20 50 70 95 45]
public static void shellSort(int[] data) { int j = 0; int temp = 0; for (int increment = data.length / 2; increment > 0; increment /= 2) { for (int i = increment; i < data.length; i++) { temp = data[i]; for (j = i; j >= increment; j -= increment) { if(temp < data[j - increment]){ data[j] = data[j - increment]; }else{ break; } } data[j] = temp; } for(int a : data) System.out.print(a + " "); System.out.println(""); } }
WPL、全局变量与局部变量的区别(存储?)
Java里面“==”与equals()的区别:前者比较的是地址,后者比较的是内容。
int 是在栈里创建的,Integer是在堆里创建的。栈里创建的变量要比在堆创建的速度快得多。
根据“静态型变量是存放在内存的数据区中的,它们在程序开始运行前就分配了固定的字节,在程序运行过程中被分配的字节大小是不改变的.只有程序运行结束后,才释放所占用的内存.” 这段话可以得知,全局变量就是所谓的静态变量,存放在栈中。
Java栈由栈帧元素组成。栈帧由三部分组成:局部变量区、操作数栈、帧数据区。
堆(Heap)
Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建;
Java虚拟机规范描述:所有的对象实例及数组都要在堆上分配;
Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可;
栈(Stack)
存放基本类型的数据和对象的引用,即存放变量;
如果存放的是基本类型数据(非静态变量),则直接将变量名和值存入stack中的内存中;
如果是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中);
有关堆与栈的区别,详情参见博文《剑指Offer——简述堆和栈的区别》。
编程题
1.LRUCache(29%)
程序流程图(set操作)
package cn.edu.ujn.practice; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.regex.Pattern; /** * * @author SHQ * LRUCache 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 为LRU Cache设计一个数据结构,它支持两个操作: 1)get(key):如果key在cache中,则返回对应的value值,否则返回-1。 2)set(key,value):如果key不在cache中,则将该(key,value)插入cache中(注意,如果cache已满,则必须把最近最久未使用的元素从cache中删除); 如果key在cache中,则重置value的值。 3)key,value为int型数据。 输入 第一行为capacity(capacity>0), 后面输入的每行数据,有两种情况: 一种有key和value(key,value以空格分隔),这种情况为set数据,一种只有一个key值,这种为get数据。 输出 根据给定的capacity和多组测试数据,输出指定key值对应value值,如果该key值不存在,返回-1。 样例输入 3 100 100 200 200 300 300 100 100 400 400 100 200 300 500 样例输出 100 -1 300 -1 */ public class XunLei_1 { public static void main(String[] args) { StringBuffer sb =new StringBuffer(); Scanner in = new Scanner(System.in); // 容量 int capacity = in.nextInt(); // 用于接收换行符 in.nextLine(); while (in.hasNextLine()) { String s = in.nextLine(); if(s == null || s.length() == 0) break; sb.append(s + "\r"); } resolution(capacity, sb.toString()); } private static void resolution(int capacity, String str){ /* System.out.println(capacity); System.out.println(str);*/ int index = 0; Map<Integer, HashMap<String, String>> map = new HashMap<Integer, HashMap<String, String>>(); Map<String, String> mapTmp; Pattern pat = Pattern.compile("[ ]+"); Pattern pattern = Pattern.compile("[\r]"); String [] sr = pattern.split(str); boolean flag = false; for(String s : sr){ // 注意map集合m的创建位置 HashMap<String, String> m = new HashMap<String, String>(); String [] string = pat.split(s); // set操作 if(string.length == 2){ // 如果key不在cache中,则将该(key,value)插入cache中;如果key在cache中,则重置value的值。 // 1.cache未满 if(map.size() == 0){ m.put(string[0], string[1]); map.put(index++, m); }else if(map.size() < capacity){ for(int key : map.keySet()){ mapTmp = map.get(key); // 2.cache存在旧k,替换旧v if(mapTmp.containsKey(string[0])){ m.put(string[0], string[1]); flag = true; break; } } if(!flag){ // 3.cache不存在旧k,直接插入 m.put(string[0], string[1]); } map.put(index++, m); } // 4.cache已满 else{ for(int key : map.keySet()){ mapTmp = map.get(key); // 5.cache存在旧k,替换旧v if(mapTmp.containsKey(string[0])){ m.put(string[0], string[1]); map.put(index++, m); map.remove(key); break; } else{ // 6.cache不存在旧k,使用LRU将元素从cache中删除 int min = Collections.min(map.keySet()); int max = Collections.max(map.keySet()); /* for(int i : map.keySet()){ if(i < min){ min = i; } if(i > max) max = i; }*/ // 根据LRU规则,将元素从cache中删除 map.remove(min); // 将元素存入cache中最大位置+1处 m.put(string[0], string[1]); map.put(max+1, m); break; } } } }else if(string.length == 1){ flag = false; // get操作 for(int in : map.keySet()){ mapTmp = map.get(in); if(mapTmp.containsKey(string[0])){ flag = true; System.out.println(mapTmp.get(string[0])); break; } } if(!flag) System.out.println("-1"); } } } }
注
其中,有关map类型m的创建位置,自己再次犯了错误。new的m为引用类型,存放在栈中。应保证m在循环体内创建,这样结果才不会出现map累加的现象。类似错误同样出现在博文《Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值》。
2迅雷专用链提取(正则超时)
package cn.edu.ujn.practice; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author SHQ 迅雷专用链提取 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 迅雷专用链是通过迅雷专用链技术将网站现有的HTTP、FTP等下载协议转换成迅雷的专用下载协议,从而实现与web迅雷的无缝结合。常见的软件下载使用的是http或ftp下载协议,而迅雷专用链使用的是专用的"thunder://"下载协议。现给定一个网页的内容文本,需要从中找出所有的雷专用链并输出结果,重复的迅雷专用链只输出一个,在网页的内容文本字符串中的位置排前的迅雷专用链先输出。 已知迅雷专用链组成: “thunder://” + 对正常http下载链接进行处理后Base64编码的字符串 (Base64编码后的字符串由数字、大小写字母、加号’+’、斜杠’/’、等号”=”组成) 如: thunder://QUFodHRwOi8vZGwueHVubGVpLmNvbS9aWg== 输入 网页内容的文本字符串,可能是多行。 输出 如果没有找到,则输出 no。 如果找到结果: 第一行输出一个整数,即找到的迅雷专用链个数n 接下的n行每行输出一个迅雷专用链,重复的迅雷专用链只输出一次,在输入字符串中的位置排前的迅雷专用链先输出。 样例输入 <a href="thunder://QUFodHRwOi8vZGwueHVubGVpLmNvbS9aWg==/">This ia a thunder url</a> 样例输出 1 thunder://QUFodHRwOi8vZGwueHVubGVpLmNvbS9aWg== Hint 题目解析: 主要分析迅雷专用链的特点,通过字符串匹配查找,或通过正则表达式查找。 */ public class XunLei_2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); StringBuffer sb = new StringBuffer(); while (in.hasNextLine()) { // 输入文本 String s = in.nextLine(); if(s == null || s.length() == 0) break; sb.append(s); resolution(sb.toString()); // 只输出这句话就能通过17%!也是醉了~ System.out.println("no"); } } private static void resolution(String str){ Pattern pattern = Pattern.compile("(thunder://){1}[\\w\\d//=+]+"); Matcher matcher = pattern.matcher(str); StringBuffer buffer = new StringBuffer(); int cnt = 0; while(matcher.find()){ cnt++; buffer.append(matcher.group()); buffer.append("\r\n"); } System.out.println(cnt); System.out.println(buffer.toString()); } }
绝对的坑,用正则直接提示超时!
感触
做编程题之前,首先要画出流程图,使编程逻辑更加清晰。编程完成后,要设计测试用例,分为功能性测试和特殊测试。尤其要特别注意边界值的测试。
美文美图
剑指Offer——迅雷笔试题+知识点总结的更多相关文章
- 剑指Offer——网易笔试题+知识点总结
剑指Offer--网易笔试题+知识点总结 Fibonacci package cn.edu.ujn.nk; import java.util.ArrayList; import java.util.S ...
- 剑指Offer——咪咕笔试题+知识点总结
剑指Offer--咪咕笔试题+知识点总结 情景回顾 时间:2016.10.09 15:00-16:30 地点:山东省网络环境智能计算技术重点实验室 事件:咪咕笔试 知识点总结 1.Html设置格式贵阳 ...
- 剑指Offer——滴滴笔试题+知识点总结
剑指Offer--滴滴笔试题+知识点总结 情景回顾 时间:2016.9.18 15:00-17:00 地点:山东省网络环境智能计算技术重点实验室 事件:滴滴笔试 总体来说,滴滴笔试内容体量不算多, ...
- 《剑指offer》面试题39 二叉树的深度(java)
摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...
- 【剑指Offer】面试题10- II. 青蛙跳台阶问题
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- 《剑指Offer》- 面试题3
<剑指Offer——名企面试官精讲典型编程题> 面试题3: 二维数组元素从左到右.从上到下递增,输入一个二维数组和一个整数, 查找该整数. 自己的思路:有序条件下进行查找,当然最简单 ...
- 《剑指offer》面试题的Python实现
<剑指Offer>是很多程序员面试前要看的书,但里面的算法都是基于C++实现的,最近用了三周左右时间,用Python完成了里面几乎所有的算法题,由于时间以及个人水平均有限,或许会有部分问题 ...
随机推荐
- 空间漫游(SAC大佬的测试)
题目描述由于球哥和巨佬嘉诚交了很多保护费,我们有钱进行一次 d 维空间漫游.d 维空间中有 d 个正交坐标轴,可以用这些坐标轴来描述你在空间中的位置和移动的方向.例如,d = 1 时,空间是一个数轴, ...
- BZOJ 1510: Kra-The Disks
Johnny 在生日时收到了一件特殊的礼物,这件礼物由一个奇形怪状的管子和一些盘子组成. 这个管子是由许多不同直径的圆筒(直径也可以相同) 同轴连接而成. 这个管子的底部是封闭的,顶部是打开的. 下图 ...
- 【BZOJ3573】【HNOI2014】米特运输
Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...
- 51nod 1682 中位数计数
1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均 ...
- hdu 3247 AC自动+状压dp+bfs处理
Resource Archiver Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Ot ...
- Python小代码_5_二维矩阵转置
使用列表推导式实现二维矩阵转置 matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] print(matrix) matrix_t = [[ro ...
- 解决IE6下select显示在弹出框上问题
利用定位position:absolute;z-index:1;和iframe[z-index:-1]来解决此问题,最好根据需要加上: border='0' frameborder='0' scrol ...
- #error : Xiron Platform Abstraction Layer - Win32 - Microsoft Visual Studio versions above 2010 (10.0) are not supported! 解决方案
OpenNI1.5 VS2013配置环境后,编译会出现这个错误: 错误 error C1189: #error : Xiron Platform Abstraction Layer - Win32 - ...
- 原生JS模拟百度搜索关键字与跳转
<style type="text/css"> *{ margin: 0; padding: 0; } #text{ width: 300px; height: 30p ...
- AIX 命令
1,[ctrl]+h 删除命令 2, set -o emacs后: [ctrl]+p 看上条命令 [ctrl]+n 看下条命令 两次[esc] 自动补全 3, set -o vi 后,可以按照vi编辑 ...