为什么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研发编程题相关推荐

  1. java 并发编程多线程_多线程(一)java并发编程基础知识

    线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...

  2. Java网络编程和NIO详解开篇:Java网络编程基础

    老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...

  3. 【渝粤题库】广东开放大学 Java高级编程技术 形成性考核

    ​题目: Java语言中可以作为标识符的有(). 题目: Java中的流程控制语句包括(). 题目:计算机语言的发展经历了非常大的变革,其发展具体包括(). 题目:java源程序经过编译器编辑后,形成 ...

  4. java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

    前言: 虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面.面试开始会让自我介绍,主要业务架构和技术架构两部分.业务架构一般不会深究,但要面试官听明白,并且一般面 ...

  5. 面试:算法LRU(Least Recently Used),字节跳动Java研发算法题

    LRU是什么? 首先考虑这样的一个业务场景,小王在A公司上班,有一天产品提出了一个需求:"咱们系统的用户啊,每天活跃的就那么多,有太多的僵尸用户,根本不登录,你能不能考虑做一个筛选机制把这些 ...

  6. 【校招笔试】22届秋招各公司校招笔试面试汇总(不断更新)

    文章目录 一.笔试 二.面试 三.相关题 一.笔试   [校招笔试]大华 - 软件岗   [校招笔试]诺瓦 - 嵌入式岗   [校招笔试]网易 - 测试岗   [校招笔试]爱奇艺 - 软件岗   [校 ...

  7. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  8. java网络编程与分布式计算_Java_net Java网络编程与分布式计算 - 下载 - 搜珍网

    Java网络编程与分布式计算/ch11/ActivatableLightBulbServer.java Java网络编程与分布式计算/ch11/active.policy Java网络编程与分布式计算 ...

  9. Java并发编程—常见面试题

    建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...

最新文章

  1. C# 16进制与字符串、字节数组之间的转换
  2. linux下如何修改weblogic console登陆的用户名和密码
  3. 【原】ASP.Net 项目实做 搭建开发环境
  4. NOIP练习赛题目5
  5. 用CComPtr吧,COM接口指针很危险
  6. python清空集合_python集合删除多种方法详解
  7. Linux驱动之设备模型(1)
  8. linux ruby作用域,浅谈ruby语言中的一些概念(lambda, proc, block)
  9. 《壹百度—百度十年千倍的29条法则》
  10. Qt QApplication 类简介--Qt 类简介专题(四)
  11. 计算机组成原理实验(logisim)
  12. android 源码编译apk,在Android源码里编译apk
  13. python pip 安装 升级 卸载命令
  14. 图像篡改被动检测技术一览:基于特征提取和卷积神经网络的篡改检测
  15. win7文件扩展名被隐藏无法修改文件格式怎么办?
  16. unity3d摄像机的透视有些夸张怎么办?
  17. 【AI视野·今日CV 计算机视觉论文速览 第169期】Fri, 22 Nov 2019
  18. Android 手机遥控器控制机顶盒(电视)
  19. Mac Safari 模拟 IE
  20. Python爬虫入门教程 95-100 帮粉丝写Python爬虫之【全网通用评论爬虫】

热门文章

  1. 如何删除空文件夹Java_JAVA实现将磁盘中所有空文件夹进行删除的代码
  2. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
  3. 中虚数怎么表示_英文论文写作中的常见错误
  4. 数字电路反相器符号_数字电路の门电路(1)
  5. upload-labs_pass10_点空点绕过_pass11_双写文件扩展名
  6. python模拟app抢票_python并发编程多进程 模拟抢票实现过程
  7. onnx模型部署 python_onnxruntime模型部署流程
  8. python opencv 识别角度_OpenCV入门之获取图像的旋转角度
  9. MapReduce执行WordCount操作
  10. Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索