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. Android P(9.0) 证书加密算法变更
  2. android 计算地图上两点距离的算法
  3. android arm64硬件实现加速crc32算法
  4. Android 学生管理系统 之 SQLite数据库操作
  5. # Android: ListView 学生管理
  6. Retrofit 风格的 RxCache及其多种缓存替换算法
  7. Android studio应用程序设计——简单的学生信息录入应用app
  8. [Android算法] 【eoeAndroid索引】史上最牛最全android开发知识

随机推荐

  1. android 保存bitmap到SD卡
  2. android添加联系人(直接添加到联系人数据
  3. Android(安卓)FragmentTabHost轻松实现微
  4. android 2.2 apidemos 赏析笔记 5
  5. Android(安卓)Circular Progress Button
  6. android 4.0 HttpURLConnection. getInpu
  7. android 遍历控件
  8. android 判断字符串是否是数字
  9. Android(安卓)xml定义常量
  10. android nfc(官方翻译)