黑马程序员技术交流社区

标题: 今天遇到的一个算法题 [打印本页]

作者: 张鹏宇    时间: 2014-5-17 23:30
标题: 今天遇到的一个算法题
a-s重复106次 重复去掉奇数最后剩下的字母。以下是我写的程序,求更快更准更狠。
  1. public class Main {

  2. public static void main(String[] args){

  3. int[] arr = new int[2015];

  4. int n = 1007;

  5. for(int i=0;i<=2014;i++){

  6. arr[i] = i;

  7. }

  8. while(n!=0){

  9. for(int i=1;i<=n;i++){

  10. arr[i] = arr[2*i];

  11. } n = n/2;

  12. }

  13. }

  14. System.out.println(arr[1]);

  15. System.out.println(arr[1]%19);

  16. }

  17. }
复制代码

作者: 墨香    时间: 2014-5-17 23:45
看看这个行吗?
  1. public class Main {

  2.     public static void main(String[] args) {
  3.         String o = "abcdefghijklmnopqrs";
  4.         String s = "";
  5.         for (int i = 0; i < 106; i++) {
  6.             s += o;
  7.         }

  8.         while (s.length() > 1) {
  9.             if (s.length() % 2 != 0)
  10.                 s = s.substring(0, s.length() - 1);
  11.             s = s.replaceAll("[a-z]([a-z])", "$1");
  12.         }

  13.         System.out.println(s);
  14.     }

  15. }
复制代码

作者: 张鹏宇    时间: 2014-5-18 22:43
墨香 发表于 2014-5-17 23:45
看看这个行吗?

这样不断字符串操作,太慢了
作者: 墨香    时间: 2014-5-19 22:09
张鹏宇 发表于 2014-5-18 22:43
这样不断字符串操作,太慢了

你有看到我使用正则表达式做的吗?这个算是比较快的了
作者: 张鹏宇    时间: 2014-5-20 09:26
墨香 发表于 2014-5-19 22:09
你有看到我使用正则表达式做的吗?这个算是比较快的了

正则表达式很慢的
作者: sanguodouble1    时间: 2014-6-24 14:44
  1. public static void n() {
  2.                 char[] cs = new char[2015];
  3.                 cs[0] = 0;
  4.                 char p = 'a';
  5.                 //赋值,一共19*106=2014个字母
  6.                 for (int i=1; i<=2014; i++) {
  7.                         cs[i] = p;
  8.                         if (p == 's') {
  9.                                 p = 'a';
  10.                         } else
  11.                                 p += 1;
  12.                 }
  13.                
  14.                 //假设i是最后剩下的值的坐标,
  15.                 int i=1;
  16.                 //i*2就是去掉奇数,如果i*2小于2014就说明这个数列的元素个数多余1个
  17.                 //一直搞到只剩1个为止
  18.                 while (i*2 <= 2014) {
  19.                         i = i*2;
  20.                 }
  21.                
  22.                 System.out.println("最后值的下标=" + i);
  23.                 System.out.println("最后值=" + cs[i]);
  24.         }
复制代码


作者: 会说话的木头    时间: 2014-6-24 15:20
没看懂 能解释下吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2