笔试面试 已知 MapReduce 程序代码块为: static class WordOperMap extends Mapper<LongWritable, Text, NullWritable, IntWritable> { public void map(LongWritable offset, Text message, Context context) throws IOException, InterruptedException { int val = Integer.parseUnsignedInt(message.toString().trim()); context.write(NullWritable.get(), new IntWritable(val)); } } static class WordOperReduce extends Reducer<NullWritable, IntWritable, IntWritable, IntWritable> { List<Integer> list = new LinkedList<Integer>(); public void reduce(IntWritable key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { Iterator<IntWritable> iterator = values.iterator(); while (iterator.hasNext()) { list.add(iterator.next().get()); } Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer arg0, Integer arg1) { return (int) (arg1 – arg0); } }); } protected void cleanup(Context context) throws IOException, InterruptedException { for (int i = 1; i < list.size() + 1; i++) { context.write(new IntWritable(i), new IntWritable(list.get(i – 1))); } } 一个内容如下的文件经过该程序处理后的输入结果为() 23 45 15 67 8
笔试面试 对于给定的长度为 的数组 ,你可以选择两个相邻的元素 和 ,将它们相加合并为一个新元素,合并后与这两个元素相邻的元素将与新的这个元素相邻,合并的代价为这个新元素的值。 求解将全部 个元素合并为一个元素需要的最小代价。