网易2017校园招聘数据挖掘笔试题
题目一:藏宝图
-------------------------------------------------------------------------------------------------------------------------------------------------------------
牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,
根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,
它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
输入描述:每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
输出描述:输出一行 “Yes” 或者 “No” 表示结果。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
输入:
x.nowcoder.com
ooo
输出:
yes
正确的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package problem1; import java.util.*; /** * Created by Administrator on 2017/9/8. */ public class CaoBaoTu_Right { public static final void main(String[] args){ Scanner scan=new Scanner(System.in); while(scan.hasNext()){ String str1=scan.nextLine(); String str2=scan.nextLine(); boolean result=isContain(str1,str2); if(result){ System.out.println("Yes"); }else{ System.out.println("No"); } } scan.close(); } public static boolean isContain(String str1,String str2){ for(int i=0,index=0;i<str1.length();i++){ if(str1.charAt(i)==str2.charAt(index)){ index++; if(index==str2.length()){ return true; } } } return false; } }
自己写的代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package problem1; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; /** * http://blog.csdn.net/a819825294/article/details/52098020 牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串s和t,根据古老的传说,牛牛需要每次都回答t是否是s的子序列。注意,子序列不要求在原字符串中是连续的,例如串abc,它的子串序列就有{空串,a,b,c,ab,ac,bc,abc}8种。 */ public class CangBaoTu { public static void main(String[] args) { Scanner in = new Scanner(System.in); //两字符串输入 String s1 = in.nextLine(); //System.out.println("s1:"+s1); String s2 = in.nextLine(); // System.out.println("s2:"+s2); //创建两个HashMap集合,存放字符串 HashMap<Character, Integer> hashMap1 = new HashMap<Character, Integer>(); HashMap<Character, Integer> hashMap2 = new HashMap<Character, Integer>(); //统计字符串s1的频率 for (char c1 : s1.toCharArray()) { if (hashMap1.containsKey(c1)) { hashMap1.put(c1, hashMap1.get(c1) + 1); } else { hashMap1.put(c1, 1); } } //统计字符串s2的频率 for (char c2 : s2.toCharArray()) { if (hashMap2.containsKey(c2)) { hashMap2.put(c2, hashMap2.get(c2) + 1); } else { hashMap2.put(c2, 1); } } //判断是否包含 Set<Map.Entry<Character, Integer>> set1 = hashMap1.entrySet(); /*for (Map.Entry<Character, Integer> entry1 : set1) { Character key1=entry1.getKey(); Integer value1=entry1.getValue(); System.out.println(key1+" "+value1); }*/ Set<Map.Entry<Character, Integer>> set2 = hashMap2.entrySet(); /* for (Map.Entry<Character, Integer> entry2 : set2) { Character key2=entry2.getKey(); Integer value2=entry2.getValue(); System.out.println(key2+" "+value2); }*/ String flag="No"; for (Map.Entry<Character, Integer> entry1 : set1) { for (Map.Entry<Character, Integer> entry2 : set2) { if (entry1.getKey().equals(entry2.getKey()) && (entry1 .getValue() == entry2.getValue())) { flag="Yes"; } } } System.out.println(flag); } }
题目二:下厨房
-------------------------------------------------------------------------------------------------------------------------------------------------
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
------------------------------------------------------------------------------------------------------------------------------------------------
输入描述:
每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
-----------------------------------------------------------------------------------------------------------------------------------------------
输出描述:
输出一行一个数字表示完成所有料理需要多少种不同的材料。
--------------------------------------------------------------------------------------------------------------------------------------------
输入
BUTTER FLOUR HONEY FLOUR EGG
输出
4
--------------------------------------------------------------------------------------------------------------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package problems; import java.util.HashSet; import java.util.Scanner; /** * 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 * * 测试用例 * BUTTER FLOUR HONEY FLOUR EGG 输出:4 */ public class LiaoLi { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashSet<String> hashSet = new HashSet<String>(); while (in.hasNext()) { String str=in.nextLine(); String[] arr=str.trim().split(" "); for(int i=0;i<arr.length;i++){ hashSet.add(arr[i]); } } System.out.println(hashSet.size()); hashSet.clear(); } }
------------------------------------------------------------------------------------------------------------------------------------------
题目三:
------------------------------------------------------------------------------------------------------------------------------------------
n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
------------------------------------------------------------------------------------------------------------------------------------------
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
------------------------------------------------------------------------------------------------------------------------------------------
输出描述:
------------------------------------------------------------------------------------------------------------------------------------------
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1
------------------------------------------------------------------------------------------------------------------------------------------
示例1
输入
4
7 15 9 5
输出
3
------------------------------------------------------------------------------------------------------------------------------------------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package problem5; import java.util.Scanner; /** * n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 */ public class FeiApple { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextInt()) { int n = scanner.nextInt(); int[] num = new int[n]; for (int i = 0; i < n; i++) { num[i] = scanner.nextInt(); } System.out.println(avg(num)); } } public static int avg(int[] num) { int average = 0; int sum = 0; int len = num.length; for (int i = 0; i < len; i++) { sum += num[i]; } average = sum / len; if (sum % len != 0) { return -1; } for (int i = 0; i < len; i++) { int t = Math.abs((num[i] - average)); if (t % 2 != 0) return -1; } int index = 0; for (int i = 0; i < len; i++) { if (num[i] > average) index += (Math.abs(num[i] - average) / 2); } return index; } }