java吧 关注:1,254,933贴子:12,742,982
  • 26回复贴,共1

两道算法题,求解

只看楼主收藏回复



IP属地:安徽1楼2014-09-13 14:56回复
    1,给定一个字符串,请写一段代码找出这个字符串中首先出现两次的那个字符
    例如 “bacaeeff” 输出 a


    IP属地:安徽2楼2014-09-13 14:57
    收起回复
      2,数组int[] a={1,3,4,6,8,9,11} 查找key为4,第一次 key和6比较,a变为 {1,3,4} ,第二次key和3比较,a变为{4},第三次key和4比较,相等,就找到了,写一个方法去实现它


      IP属地:安徽3楼2014-09-13 15:02
      收起回复
        第一题可以用hashmap,loop每个char,看看hash里有没有,有的话就break,输出那个char,没有的话就将那个char放进hash。


        4楼2014-09-13 15:38
        收起回复
          第二题就是binary search而已


          5楼2014-09-13 15:40
          回复
            int key = 4;
            int l = a.length;
            int m = (l + l % 2) / 2 - 1;
            while (l > 1) {
            if (a[m] > key) {
            a = Arrays.copyOfRange(a, 0, m);
            } else if (a[m] < key) {
            a = Arrays.copyOfRange(a, m + 1, l - m + 1);
            } else {
            break;
            }
            l = a.length;
            m = (l + l % 2) / 2 - 1;
            }
            System.out.println(a[0]);


            6楼2014-09-13 17:27
            收起回复
              String s = "bacaeeff";
              int index = 1;
              for (; index < s.length(); index++) {
              int i = s.indexOf(s.charAt(index));
              if (i != -1 && i < index) {
              break;
              }
              }
              System.out.println(s.charAt(index));
              当然这么写要求s长度至少为2位,而且没验证找不到的情况,反正只是写着玩的


              IP属地:辽宁11楼2014-09-15 16:25
              回复
                @陌路就此孤单i
                请根据需要自行修改你的a和key,在a里要是查不到key的值得话,会返回-1。
                希望帮到你。
                int[] a={1,3,4,6,8,9,11};
                int key = 11;
                int l = a.length;
                int m = (l + l % 2) / 2 - 1;
                while (l > 1) {
                if (a[m] > key) {
                a = Arrays.copyOfRange(a, 0, m);
                } else if (a[m] < key) {
                a = Arrays.copyOfRange(a, m + 1, l);
                } else {
                a = new int[]{a[m]};
                printInt(a);
                break;
                }
                l = a.length;
                m = (l + l % 2) / 2 - 1;
                }
                if (a[0] == key) {
                System.out.println(a[0]);
                } else {
                System.out.println("-1");
                }


                12楼2014-09-15 16:41
                回复