昨天晚上参加了有赞校招Java类笔试,题目总体难度适中,这里我给大家分享一下这次笔试的三个编程题。

第一题:
1.题目

2.思路
我对这个题目的基本思路是用空格分隔字符串得到字符串数组,该字符串数组元素可能是空,也可能是包含单词和空格的字符串。然后将数组转换成List,对List的每个元素处理成开头大写、之后小写的形式再输出。

3.实现
以下代码是我的实现:

package com.liu.date20171017;import java.util.*;/*** 2018有赞笔试编程题第一题:字符串转换* Created by Herry on 2017/10/17.*/
public class TransferString {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();transfer(input);//transferList(input);}//方法一:普通迭代器实现(笔试时100%通过测试用例)public static void transfer(String input) {List<String> numList = new ArrayList(Arrays.asList(input.split(" ")));ArrayList result = new ArrayList<String>();Iterator<String> it = numList.iterator();while(it.hasNext()) {String item = it.next();if(item.equals("")) {it.remove();continue;}item = item.toUpperCase().charAt(0) + item.substring(1).toLowerCase();result.add(item);}//JDK1.8中不需要循环输出。因为笔试时牛客网只提供JDK 1.7,不能使用String类的jion()来拼接字符串,所以这里通过循环输出for(int i = 0; i < result.size() -1; i ++) {System.out.print(result.get(i) + " ");}System.out.print(result.get(result.size() -1));//JDK 1.8输出方式。不需要循环输出,换用下面的输出即可//System.out.print(String.join(" ", result));}//方法二:List专用迭代器实现(未经过测试用例测试)public static void transferList(String input) {List<String> numList = new ArrayList(Arrays.asList(input.split(" ")));ListIterator<String> it = numList.listIterator();while(it.hasNext()) {String item = it.next();if(item.equals("")) {it.remove();continue;}it.set(item.toUpperCase().charAt(0) + item.substring(1).toLowerCase());}System.out.print(String.join(" ", numList));}}

需要说明的是,实现中使用了两种方式,第一种是采用普通迭代器实现的,普通迭代器不能在元素遍历的时候对元素进行修改,所以只能用另外一个List来接收处理后的元素,输出时也有JDK版本的区分。第二种是采用List专用迭代器实现的,这种迭代器支持在元素遍历的时候对元素进行修改,所以不用额外用List接收处理后的元素。


第二题:
1.题目

2.思路
我一开始是采用最原始的穷举法来做的,就是从较小的数开始一个一个往下测试是否满足同时整除给定的两个数,这种思路不满足题目对于性能的要求。后来参考了网上的思路,采用辗转相除的方式来实现。

3.实现
以下代码是我的实现:

package com.liu.date20171017;import java.util.Scanner;/*** 2018有赞笔试编程题第二题:求两个数的最大公约数* Created by Herry on 2017/10/17.*/
public class GreatestCommonDivisor {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num1 = scanner.nextLong();long num2 = scanner.nextLong();System.out.print(getGCD(num1, num2));}//方法一:该方法由于复杂度比较大,只能部分通过测试用例public static long getGreatestCommonDivisor(long num1, long num2) {long d = num1 < num2 ? num1 : num2; //约数while (d >= 1) {if (num1 % d == 0 && num2 % d == 0) {break;}d--;}return d;}//方法二:100%通过测试用例public static long getGCD(long num1, long num2)   // 循环实现{long k = 0, y = 0;if(num1 < num2){k = num1;num1 = num2;num2 = k;}while(num1 % num2 != 0){y = num1 % num2;num1 = num2;num2 = y;}return num2;}
}

我在网上还看到一种相减的方法可以求得两个数的最大公约数,有兴趣的朋友可以自行搜索学习。


第三题

  1. 列表内容

2.思路
我的思路还是比较原始,就是对于数组的每个元素,从该元素的下一个元素开始遍历整个数组,找到第一个比它大的元素就返回,如果没有找到即返回-1。但是这种方式的复杂度不满足题设要求,只通过了10%,还请做出了这道题的大神指点。

3.实现

package com.liu.date20171017;import java.util.Scanner;/*** 2018有赞笔试编程题第三题:打印每个数组元素的NGE(NGE为元素右边第一个比它大的元素)* <已实现算法不完善,只通过10%>* Created by Herry on 2017/10/17.*/
public class PrintNGE {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long[] nums = new long[n];// 获取输入for (int i = 0; i < n; i ++) {nums[i] = scanner.nextLong();}//测试用例通过率为10%for(int j = 0; j < n -1; j ++) {int flag = 0;for (int k = j + 1; k < n; k ++) {if(nums[j] < nums[k]) {System.out.println(nums[k]);flag  = 1;break;}}if(flag == 0) {System.out.println("-1");}}System.out.println("-1");}
}

总结:总体来说,这几道题的难度都不是很大,重在平时多练习,多注重对性能的追求。以上内容中,一些算法没有完全通过测试用例,还有些是考完之后我补充的实现方式,所以未用完善的测试用例测试,所以可能存在错误之处,要是发现了的话,还望指正。同时,对于以上未完全通过测试的题目,还望大神指点。如有大神有更好的实现方式,也望不吝赐教,不胜感激!

2018有赞校招笔试题相关推荐

  1. 2018网易游戏校招笔试题

    2017年4月15日的网易游戏实习生校招题目,3道题,2小时,对于没有经过ACM训练的人来说时间挺紧,最后没做完.但是毕竟猪场挑高手,自己技不如人,还需要多多努力.回头自己整理了下自己做得题目.可能有 ...

  2. CVTE的c语言面试题,2018 CVTE 前端校招笔试题整理

    昨天晚上(7.20)做了CVTE的前端笔试,总共三十道题,28道多选题,2道编程题 .做完了之后觉得自己基础还是不够扎实,故在此整理出答案,让自己能从中得到收获,同时给日后的同学一些参考. 首先说一下 ...

  3. 2018年小米校招笔试题

    我们设计了整数三角形,每一行都比上一行多出一个数,而每个数字都等于它上方与左上方两个数字之和,给出一个数字,求最先出现在哪一行 #include<iostream> #include< ...

  4. 拼多多2018届毕业生校招笔试题

    列表补全 题目 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset ...

  5. 2018 年百度校招笔试题详解

    C++ 后置++ 重载 只会调用A的func() 记住大端是反过来的,小端是正的 虚函数不能申请为构造函数 C++ 多态 仔细看,C选项是C语言的内存分配. 注意是选错误的,注意一定是 剑指offer ...

  6. 2018阿里实习校招笔试题

    有一个9位数的正整数x,去除掉中间的第5位的数字得到整数y(例如x=123456789,则y=12346789),求问存在多少个这样的x,使得x可以被y整除?(9000个,暴力求解出来的,不知道有没有 ...

  7. 数据分析真题日刷 | 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷

    今日真题 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷(来源:牛客网) 题型 客观题:单选5道,不定项选择10道 主观题:问答4道 完成时间 90分钟 牛客网评估难度系数 ...

  8. 武汉光迅科技22校招笔试题(武汉邮科院控股国企上市大厂Python的txt文本处理笔试题)

    武汉光迅科技22校招笔试题(武汉邮科院控股国企上市大厂Python的txt文本处理笔试题) 资源: https://download.csdn.net/download/weixin_53403301 ...

  9. 百度2019校招笔试题

    百度2019校招笔试题 1. 探险安排 小明要为n个人计划一次火星的探险,其中一个重要的任务是为每个参与者安排食物.仓库里面有m个能用一天的食物包裹,每个食物包裹有不同的类型ai.每个人每天必须用且只 ...

最新文章

  1. html5诗歌变换颜色,关于颜色的现代诗歌
  2. https refused 解决方法
  3. Linux centos7安装Git及 Jenkins配置Git
  4. R-3.1.1 编译安装2
  5. TLV5618 双路12位DAC 模拟SPI驱动
  6. 一定要多读多记FreeEIM
  7. composer切换源_composer的安装 及 常用命令(切换源等)
  8. 不让EditText打开就获取焦点
  9. Grails里的集成测试代码试例
  10. save cookies and get cookies in system using asp.net
  11. 解决keep-live使用之后的问题
  12. 计算机鼠标老跳动,电脑鼠标总跳是怎么回事?
  13. 用Python写了一个带界面的聊天室
  14. 网上收集的一些Java应用 选择自 yukikaze 的 Blog
  15. 【科普】关于显示器重要指标如何选购一台电脑显示器
  16. 达梦数据库基础篇--数据库管理工具
  17. mysql .frm_mysql通过frm向mysql导入表结构及数据
  18. lucene--简介
  19. 如何实现APP左右滑动DIV切换或图片滑动CSS
  20. 抑郁症,莫要讳疾忌医。

热门文章

  1. 计算机课学生段密码,在线学习平台学生端常见问题
  2. Houdini HDK 读取shapefile矢量数据 02
  3. DCB学习之二(ETS,DCBX)
  4. 100多个flash常见问题大收集
  5. 一周信创舆情观察(10.11~10.17)
  6. 【一起入门MachineLearning】中科院机器学习-期末题库-【计算题3,4】-前向算法和维特比算法手算过程
  7. 成功解决代码运行的时候出现的warnings警告问题
  8. 银联错失的良机,“网联”来补上
  9. JAVA 单调区间 交集_2015百度之星 单调区间
  10. android 设置屏幕对比度,【Android】安卓调节屏幕亮度