一、上台阶(京东笔试编程题)

题目:有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。

给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。

测试样例:3,返回:2

题目分析:测试样例,输入台阶数3,只有两种有效方式,也就是只能1,2或2,1,这样可以采用奇偶思想,两个1之间必须要有一个2。

思路1:采用递归方式(台阶数多的时候会超时)

代码实现:

public static int method(int n) {if(n > 2) return (method(n - 1) + method(n - 2)) % 1000000007;else return 1;
}

思路2:采用动态规划方法

public static int method1(int n) {int[] sum = new int[101];sum[0] = 0;sum[1] = 0;sum[2] = 1;sum[3] = 2;for (int i = 4; i <= n; i++) {sum[i] = (sum[i - 2] + sum[i - 1]) % 1000000007;}return sum[n];
}

运行结果:

二、构造回文(腾讯编程题)

题目:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.

输出描述:

对于每组数据,输出一个整数,代表最少需要删除的字符个数。

输入例子:

abcda

输出例子:

2

删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

区别:
最长公共子串(Longest Common Substirng):连续

最长公共子序列(Longest Common Subsequence,LCS):不必连续

思路:反序这个字符串,求新串和原串的最大子序列,需要删除的字母个数即为原字符串的长度减去最长公共子序列。

求最长公共子序列思路:假设s1字符串的下标为n1,s2字符串的下标为n2,最长公共子序列的长度为L;分两种情况:假设s1(n1) == s2(n2),那么此时最长公共子序列的长度L(n1+1,n2+1)=L(n1,n2)+1,如果s1(n1)!=s2(n2),此时要么舍弃s1的n1字符,要么舍弃s2的n2字符,这样就从L(n1,n2+1)、L(n1+1,n2)中挑选更长的子序列为最长公共子序列。

代码实现:

// 获取应删去的长度
public static int getCount(String s) {StringBuilder s1 = new StringBuilder(s);StringBuilder s2 = new StringBuilder(s).reverse();return s.length() - LCS(s1,s2);
}
// 求最长的公共子序列(LCS)
public static int LCS(StringBuilder s1, StringBuilder s2) {int n1 = s1.length();int n2 = s2.length();int[][] mutrix = new int[n1 + 1][n2 + 1];for (int i = 0; i < n1; i++) {for (int j = 0; j < n2; j++) {if(s1.charAt(i) == s2.charAt(j)) mutrix[i + 1][j + 1] = mutrix[i][j] + 1;else mutrix[i + 1][j + 1] = Math.max(mutrix[i][j + 1], mutrix[i + 1][j]);}}return mutrix[n1][n2];
}

该编程题解决思路转载来自原文传送门

三、字符集合(华为校招)

题目:输入一个字符串,求出该字符串包含的字符集合

输入描述:每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出描述:每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

输入例子:abcqweracb

输出例子:abcqwer

思路:去除输入字符串中重复的字符,最后输出剩下的字符串。使用HashMap来处理这个问题,保存不存在的字符。

代码实现:

// 输入校验,只能输入字符,正则表达式
String regex = "^[a-zA-Z]+$";
// 求字符串包含的集合
public static StringBuilder stringSet(String s) {int j = 0;StringBuilder sb = new StringBuilder();HashMap<Integer, Character> hm = new HashMap<>();for (int i = 0; i < s.length(); i++) {if(!hm.containsValue(s.charAt(i))) {j++;hm.put(j, s.charAt(i));}}for(int n: hm.keySet()) {sb.append(hm.get(n));}return sb;
}

输出结果:

四、组成无重复的三位数

输入例子:1,2,3,4

输出结果:24 个

代码实现:

    private static void getNumber() {int i = 0, j = 0, k =0, n = 0;for (i = 1; i <= 4; i++) {for (j = 1; j <= 4; j++) {for (k = 1; k <= 4; k++) {if (i != j && j != k && i != k) {n  += 1;Sys}}}}System.out.println("共有:" + n + "个不重复的三位数");}

输出结果:

123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
共有:24个不重复的三位数Process finished with exit code 0

五、计算空格之后的字符串长度

代码实现:

private static int getWorldLength(String s) {return s.trim().length() - s.trim().lastIndexOf(" ") - 1;
}

输出结果:

输入的字符串: Hello world
空格后字符串的长度为:5Process finished with exit code 0

六、计算两个长整数之和

方式1:采用字符数组

/*** 求和基于字符数组* 可以使用类似小学做数学题,竖列按位相加,将整数每个位置的数字放入字符数组中,然后再相加* @param bigNumA 较大整数A* @param bigNumB 较大整数B* 时间:650ms* */private static String getResult(String bigNumA, String bigNumB) {char[] charA = new StringBuilder(bigNumA).reverse().toString().toCharArray();char[] charB = new StringBuilder(bigNumB).reverse().toString().toCharArray();
//        int maxLength = charA.length > charB.length ? charA.length:charB.length;int maxLength = Math.max(charA.length, charB.length);int[] result = new int[maxLength + 1];for (int i = 0; i < result.length; i++) {int temp = result[i];if (i < charA.length) {temp += charA[i] - '0';}if (i < charB.length) {temp += charB[i] - '0';}if (temp >= 10) {temp = temp - 10;result[i + 1] = 1;}result[i] = temp;}StringBuilder sb = new StringBuilder();boolean flag = true;for (int i = result.length - 1; i >= 0; i--) {if (result[i] == 0 && flag) {continue;}flag = false;sb.append(result[i]);}return sb.toString();}

方式二:采用 Math 类的 BigInteger、BigDecimal

/*** 使用 BigInteger 类、BigDecimal 类* */private static String getTwoSum(String s1, String s2) {
//        return new BigInteger(s1).add(new BigInteger(s2)).toString();return new BigDecimal(s1).add(new BigDecimal(s2)).toString();}

版权声明:欢迎转载, 转载请保留原文链接。https://mp.csdn.net/postedit/79354045

Java程序员从笨鸟到菜鸟(三)算法笔试题相关推荐

  1. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  2. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

  3. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  4. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  5. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

    在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况.有时候也需要导出pdf或者CSV报表.其实原理都差不多.刚开始本来不打算也这篇博客介绍这个的.感觉这篇博客和前面的博客有点雷同.原理基本都 ...

  6. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  7. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  8. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

  9. Java程序员由笨鸟到菜鸟 电子版书正式发布 欢迎大家下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 欢迎关注 ...

  10. java程序员从笨鸟到菜鸟_Java程序员从笨鸟到菜鸟之(十四)Html基础积累总结(上)...

    [新朋友]点击标题下面(↑)蓝色字"Java那些事"关注 [老朋友]点击右上角,转发或分享本页面内容 这是我以前写的<java程序员由笨鸟到菜鸟>系列博客,每天更新一篇 ...

最新文章

  1. 中信银行总行信息科技部笔试面试以及最后拿offer经历
  2. keras-vis可视化特征
  3. 嵌入式环境:挂载开发板根NFS文件系统失败
  4. 2.4 梯度下降法-深度学习-Stanford吴恩达教授
  5. html数据分析表格api_Python数据分析基本库——Matplotlib(一)
  6. differential forms
  7. python和matlab矩阵运算效率_如何写出比 MATLAB 更快的矩阵运算程序?
  8. loadrunner中文件的操作
  9. 国产操作系统产业深度解析
  10. 快速制作index.html,介绍一个h5快速制作平台鲁班H5
  11. 天梯赛-愿天下有情人都是失散多年的兄妹-题解
  12. 逍遥模拟器怎么开启vt?
  13. CollabNet Subversion Edge 版本库访问规则 svn
  14. 亚洲杯:艾因月夜,里皮妙手导演逆转
  15. composer错误
  16. modelsim/Questasim中添加xilinx ip库,并仿真成功
  17. 两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法
  18. Java IO BIO NIO
  19. 抓rtmp推流地址_如何获取第三方推流地址?
  20. 局域网访问提示无法访问检查拼写_无法访问局域网共享(win7访问xp):请检查名称的拼写.否则网络可能有问题. 错误代码0x80004005...

热门文章

  1. Android Excel 解析 xls 和 xlsx,方法也可以很简单
  2. 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt
  3. 【雕爷学编程】Arduino动手做(71)---红外遥控扩展模块
  4. Cocos2dx入门
  5. 魅族手机Root之后如何恢复
  6. Eclipse中文版之完美汉化教程(详细图解)
  7. js 对中文字符的 解码 与 编码
  8. 斐讯k3更新mysql_斐讯K3官改,安装onmp教程,回馈社区。-附TCExam后续安装
  9. SPSS基础数据操作之变量的计算及个案计数
  10. 年会将近,如何用Excel做个抽奖界面?