网易笔试编程题java_2017年网易校招笔试JAVA研发编程题
为什么80%的码农都做不了架构师?>>>
尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM大神点醒。下面附上原题和我的解法,不喜勿喷。
第一题:rev翻转
实现一个rev操作,使得一个整数反转,如输入"123",输出"321",并去掉前导0,如输入“100”,输出"1"。然后输入两个数a,b,输出rev(rev(a)+rev(b))的结果。
输入输出示例:
输入:
100 322
输出:
422
解题思路:这题较为简单,只要能写出rev函数就可以解决问题。我采用的方法是从个位开始逐个提取数字拼接字符串的方式实现,设置首0标志,凡遇到0则剔除,当遇到非0数字时,取消首0检验。不多说,附上代码:
import java.util.Scanner;
public class Main {
public static int rev(int a){
StringBuffer string =new StringBuffer();
int b = 0 ;
boolean flag=true;
while(a>0){
b = a%10;
a = (a-b)/10;
if(flag){
if(b!=0){
flag = false;
string.append(Integer.toString(b));
}
}else{
string.append(Integer.toString(b));
}
}
return Integer.parseInt(string.toString());
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {//注意while处理多个case
int a = in.nextInt();
int b = in.nextInt();
System.out.println(rev(rev(a)+rev(b)));
}
}
}
第二题:暗黑的字符串
使用“A”,“B”,“C” 三个字符构建字符串,对于一个构建好的字符串,如果存在连续三个字符,“A”,“B”,“C” 三个字符刚好各出现一次,如“ABCA”,那么称这样的字符串是“纯净”的。如果找不到这样的连续三个字符满足条件,那么称这样的字符串是“暗黑”的,如“ABAA”。
现在给定一个整数n,试输出能构成的n位暗黑字符串的个数。
输入输出示例:
输入:
3
输出:
21
分析:这题笔一开始笔者采用的是暴力穷举的方法,就是列出所3^n种可能,然后逐一判断是否暗黑来进行统计。在构建出所有的字符串时采用了递归的方法,即通过一位一位地增加位数的方式得到,算法复杂度较高。代码如下:
import java.util.Scanner;
public class Main {
public static boolean isWhite(String testString){
boolean flag = false;
String[] abc = new String[]{"ABC","ACB","BAC","BCA","CBA","CAB"};
for (int i = 0; i < abc.length; i++) {
if(testString.contains(abc[i])){
flag = true;
break;
}
}
return flag;
}
public static String[] generateABC(int n){
String[] init = new String[]{"A","B","C"};
if(n==1){
return init;
}else{
String[] abc = generateABC(n-1);
String[] ABC = new String[abc.length*init.length];
for (int i = 0; i < abc.length; i++) {
for (int j = 0; j < init.length; j++) {
ABC[j*abc.length+i] =abc[i]+init[j];
}
}
return ABC;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
StringBuffer testString = new StringBuffer();
if(n<3){
System.out.println((int)(Math.pow(3,n)));
}else{
int count = 0;
String[] result = generateABC(n);
for (int i = 0; i
然后很快发现,这种写法在n=14时就坚持不住内存溢出了。
于是请教了ACM高手,在高手的指点下,使用了数位DP算法,完成了此题的求解。代码如下:
import java.util.Scanner;
/**
* 数位DP求解
* @author shenwc
*
*/
public class DpResovle {
private static int[][] blacks ;
private static boolean flag = true;//标记用以判断是否是首次调用
public static int[][] BlackCount (int length){
if(flag){
blacks = new int[length+1][4];
flag =false;
}
if(length==3){
//用二维数组blacks 存储暗黑字符串的个数
//第一个维度代表字符串长度
// 第二个维度的代表末尾状况
// 0 代表末尾以AAA,BBB,或CCC结尾
// 1 代表末尾以AAB,AAC,BBC,BBA,CCA,CCB结尾
// 2 代表末尾以ABA,CBC,ACA,BCB,BAB,CAC结尾
// 3 代表末尾以ABB,ACC,BCC,BAA,CAA,BAA结尾
blacks[3][0] =3;
blacks[3][1] =6;
blacks[3][2] =6;
blacks[3][3] =6;
}else {
BlackCount (length-1);
blacks[length][0] = blacks[length-1][0]+blacks[length-1][3];
blacks[length][1] = 2*(blacks[length-1][0]+blacks[length-1][3]);
blacks[length][2] = blacks[length-1][1]+blacks[length-1][2];
blacks[length][3] = blacks[length-1][1]+blacks[length-1][2];
}
return blacks;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
StringBuffer testString = new StringBuffer();
if(n<3){
System.out.println((int)(Math.pow(3,n)));
}else{
long time1 = System.currentTimeMillis();
int[][] result = BlackCount(n);
int count = 0;
for (int i = 0; i < 4; i++) {
count+=result[n][i];
}
System.out.println(count);
long time2 = System.currentTimeMillis();
System.out.println("用时:"+(time2-time1)+"ms");
}
}
}
第三题:回文序列
对于{1,2,1},{345},{2,3,3,2}这样对称的序列我们称之为回文序列。
现在对于任意一个输入的序列,如{1,2,3,4},我们有一种操作,将相邻两个数相加并放回到这两个数原来的位置。对于{5,2,3,4},可以通过一次操作变为{7,3,4},两次操作变为{7,7}。
现在试求出对于任意一个输入的序列,将其变为回文序列的最小步数。
输入输出示例:
输入:
4(代表序列个数)
5 2 3 4
输出:
2
分析:本题笔者没有写出代码。不知道这题是否可以用动态规划的方法求解,如果可以,还请大神指教。
网易笔试编程题java_2017年网易校招笔试JAVA研发编程题相关推荐
- java 并发编程多线程_多线程(一)java并发编程基础知识
线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...
- Java网络编程和NIO详解开篇:Java网络编程基础
老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...
- 【渝粤题库】广东开放大学 Java高级编程技术 形成性考核
题目: Java语言中可以作为标识符的有(). 题目: Java中的流程控制语句包括(). 题目:计算机语言的发展经历了非常大的变革,其发展具体包括(). 题目:java源程序经过编译器编辑后,形成 ...
- java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...
前言: 虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面.面试开始会让自我介绍,主要业务架构和技术架构两部分.业务架构一般不会深究,但要面试官听明白,并且一般面 ...
- 面试:算法LRU(Least Recently Used),字节跳动Java研发算法题
LRU是什么? 首先考虑这样的一个业务场景,小王在A公司上班,有一天产品提出了一个需求:"咱们系统的用户啊,每天活跃的就那么多,有太多的僵尸用户,根本不登录,你能不能考虑做一个筛选机制把这些 ...
- 【校招笔试】22届秋招各公司校招笔试面试汇总(不断更新)
文章目录 一.笔试 二.面试 三.相关题 一.笔试 [校招笔试]大华 - 软件岗 [校招笔试]诺瓦 - 嵌入式岗 [校招笔试]网易 - 测试岗 [校招笔试]爱奇艺 - 软件岗 [校 ...
- Java Socket编程如何建立两者关系
转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...
- java网络编程与分布式计算_Java_net Java网络编程与分布式计算 - 下载 - 搜珍网
Java网络编程与分布式计算/ch11/ActivatableLightBulbServer.java Java网络编程与分布式计算/ch11/active.policy Java网络编程与分布式计算 ...
- Java并发编程—常见面试题
建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...
最新文章
- C# 16进制与字符串、字节数组之间的转换
- linux下如何修改weblogic console登陆的用户名和密码
- 【原】ASP.Net 项目实做 搭建开发环境
- NOIP练习赛题目5
- 用CComPtr吧,COM接口指针很危险
- python清空集合_python集合删除多种方法详解
- Linux驱动之设备模型(1)
- linux ruby作用域,浅谈ruby语言中的一些概念(lambda, proc, block)
- 《壹百度—百度十年千倍的29条法则》
- Qt QApplication 类简介--Qt 类简介专题(四)
- 计算机组成原理实验(logisim)
- android 源码编译apk,在Android源码里编译apk
- python pip 安装 升级 卸载命令
- 图像篡改被动检测技术一览:基于特征提取和卷积神经网络的篡改检测
- win7文件扩展名被隐藏无法修改文件格式怎么办?
- unity3d摄像机的透视有些夸张怎么办?
- 【AI视野·今日CV 计算机视觉论文速览 第169期】Fri, 22 Nov 2019
- Android 手机遥控器控制机顶盒(电视)
- Mac Safari 模拟 IE
- Python爬虫入门教程 95-100 帮粉丝写Python爬虫之【全网通用评论爬虫】
热门文章
- 如何删除空文件夹Java_JAVA实现将磁盘中所有空文件夹进行删除的代码
- 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
- 中虚数怎么表示_英文论文写作中的常见错误
- 数字电路反相器符号_数字电路の门电路(1)
- upload-labs_pass10_点空点绕过_pass11_双写文件扩展名
- python模拟app抢票_python并发编程多进程 模拟抢票实现过程
- onnx模型部署 python_onnxruntime模型部署流程
- python opencv 识别角度_OpenCV入门之获取图像的旋转角度
- MapReduce执行WordCount操作
- Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索