Android算法面试题(1)
来源:互联网 发布:工资条的制作app软件 编辑:程序博客网 时间:2024/06/05 16:18
Android算法面试题(1)
相信Android程序猿在找工作的过程中经常会遇到面试算法,下面是我记忆中的一些面试题,整理如下(尊重原创,转载请注明出处。原文地址):
1, 一个房间有100盏灯(全是关着的),由编号1-100的开关(只有两种状态,开或者关)控制,门外有100个学生,学生按次序一次进入房间,第一个进入的学生切换是1的倍数的开关,第二个学生切换是2的倍数的开关,以此类推,问,第100学生进入切换后,还有多少盏灯是亮着的?
private static void light() { int N = 100; int[] light = new int[N]; for (int k = 1; k <= N; k++) { for (int i = 1; i <= N; i++) { int index = k * i - 1; if (index < N) { light[index] = light[index] + 1; } else { break; } } } for (int i = 1; i <= N; i++) { if (light[i - 1] % 2 != 0) { System.out.print(i + "(" + light[i - 1] + ")\t"); } } }
程序输出:
1(1) 4(3) 9(3) 16(5) 25(3) 36(9) 49(3) 64(7) 81(5) 100(9)
分析
第一种思路:
第一个人切换的开关编号为i,i∈[1,n];
第二个人切换的开关编号为2i,i∈[1,n/2];
.
.
.
第k个人切换的开关编号为ki,i∈[1,n/k];
故,把所有切换的开关次数做和,由于一开始是关着的,所以只有奇数次切换,最后的状态才是开着的。
第二种思路:
1到100中,只有完全平方数(1,4,9,16,25,36,49,64,72,100)的约数是奇数个,故,最终只有这些编号的电灯是亮着的。
2,写一个字符串倒序的算法,请勿使用系统api
private static void strRevers(){ char[] str = "abcdefghijkl".toCharArray(); int len = str.length; for (int i = 0; i < len / 2; i++) { char c = str[i]; str[i] = str[len - 1 - i]; str[len - 1 - i] = c; } System.out.println(str);}
3,有一个三位数,个位是c,十位是b,百位是a,求满足abc + cba = 1333的abc
private static void f3() { int b = 1; for (int a = 0; a <= 9; a++) { for (int c = 0; c <= 9; c++) { if (a + c == 13) { System.out.println(a + "" + b + "" + c); } } } }
分析
由于a+c个位等于3,十位等于1,所以a+c = 13,所以b+b = 2。
4,有一组数,求这组数的最大数和最小数的绝对值是多少?
private static void f4() { int[] arr = new int[] { 4, 6, 9, 52, 36, 97, -63, -55, -1, 64, -36 }; int len = arr.length; int max = 0; int min = 0; for (int i = 0; i < len; i++) { if (arr[i] > max) { max = arr[i]; } if (arr[i] < min) { min = arr[i]; } } System.out.println(Math.abs(max - min)); }
5,打印九九乘方表
private static void f5() { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.printf("%2dx%2d=%2d ", j, i, i * j); } System.out.println(""); } }
6,求两个字符串的交集,例如“iloveyou”和”ihateyou”输出”eyou”
private static String strAnd(String str1, String str2) { String base = null; String match = null; if (str1.length() < str2.length()) { match = str1; base = str2; } else { match = str2; base = str1; } int start = -1; int end = -1; String ret = null; for (int i = 0; i < match.length(); i++) { char c = match.charAt(i); if (base.indexOf(c) >= 0) { start = i; break; } } for (int i = match.length() - 1; i >= start; i--) { char c = match.charAt(i); if (base.indexOf(c) >= 0) { end = i; break; } } ret = match.substring(start, end + 1); if (base.indexOf(ret) >= 0) { return ret; } else { return strAnd(ret.substring(1), base); } }
1 0
- Android算法面试题(1)
- 算法面试题(1)
- android 面试题(1)
- android 面试题(1)
- Android面试题(1)
- Android面试题(1)
- Android面试题(1)
- java经典算法面试题(1)
- Android 面试题1
- android面试题1
- Android 面试题(1)
- android面试题(1)
- Android面试题1
- Android面试题1
- android面试题1
- Android面试题1
- Android面试题1
- Android面试题1
- 线程知识学习七——并发(辅助类)
- SlidingMenu的使用及常用属性
- Android_FontMetrics
- JavaScript介绍
- oracle数据库的夺标查询
- Android算法面试题(1)
- js 正则表达式 要求密码的格式为6-12位,只能是字母、数字和下划线
- Node.js中的异步执行
- linux下读取以太网mac地址:
- Java注解教程及自定义注解
- 如何解决软键盘弹出引起的各种不适
- 3.12、BI之SSIS之数据流(源-目标-连接)
- 配置Ubuntu samba服务
- 我的完美主义思考