int b=0;
for(int i=1;i<a.length;){
    if(a[b]==a[i]){
        b=i+1;
        i+=2;
    }else
        i++;
}
if(b>=a.length)
    System.out.println("没找到");
else
    System.out.println("数是"+a[b]);

解决方案 »

  1.   

    //在已排序数组中取最小且唯一的函数
    public static int getLittle(int ex[]) {
    int temp = ex[0];
    //如果是第一个的话
    if (ex[0] < ex[1]) {
    return ex[0];
    }
    //在第二个到倒数第二个中找
    for (int i = 1; i < ex.length - 1; i++) {
    if (ex[i] != ex[i + 1] && ex[i] > ex[i - 1]) {
    return ex[i];
    }
    }
    //再看看是不是最后一个了
    if (ex[ex.length - 2] < ex[ex.length - 1]) {
    return ex[ex.length - 1];
    } else {
    System.out.println("找不到符合要求的数");
    return 999999;
    }
    }
             //表态方法,用于测试
    public static void main(String[] args) {

    int a[] ={3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11 };
    System.out.println(getLittle(a));
    }
      

  2.   

    return 999999;表示返回一个不可能的数,具体要看你怎么要求。
    逻辑就是上面代码中的,从第一个开始,到最后一个,都搜索一遍了,没有什么技巧,但实用。
      

  3.   

    mu_x(阿木)的是不对的,如果把数组换成int a[] = { 3, 3, 4, 4, 5,5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11 };去测试,结果是:数是9   ,显然是错了。
      

  4.   

    public static String getSingleMin(int[] a) {
        if (a.length <= 0) {
          return "not found";
        }
        if (a.length == 1||(a.length>1&&a[0]!=a[1])) {
          return String.valueOf(a[0]);
        }
        if (a.length == 2) {
          return a[a.length - 1] == a[a.length - 2] ? "not found" :
              String.valueOf(a[a.length - 2]);
        }
        for (int i = 2; i < a.length - 1; i++) {
          if (a[i] != a[i - 1] && a[i] != a[i + 1]) {
            return String.valueOf(a[i]);
          }
        }
        return a[a.length - 1] == a[a.length - 2] ? "not found" :
            String.valueOf(a[a.length - 1]);
      }
      

  5.   

    singledoor(等偶发了再告诉你) 你用多长时间弄完的。
      

  6.   

    好久没写算法了.
         不用扫描完就有答案了,时间复杂度平均1/2n.
    int getNumber(int a[])
    {
    if(a==null)
    {
       System.out.println("error");
       return ErrorCode;//错误码自己选
    }
    int temp = a[0];
    boolean sign = false;
        for(int i = 1;i < a.length; i++)
    {
        if(a[i] == temp)
      {
         sign = true;
       }
        else//和前一个数不一样
    {
         if(sign == false)
         return a[i];
         else
         temp = a[i];
    }
    }
    }
      

  7.   

    前一贴有点问题,改过了
    int getNumber(int a[])
    {
    if(a==null)
    {
       System.out.println("error");
       return ErrorCode;//错误码自己选
    }
    int temp = a[0];
    boolean sign = false;
        for(int i = 1;i < a.length; i++)
    {
        if(a[i] == temp)
      {
         sign = true;
        if(i == a.length-1)//是最后一个元素
       {
         return NoElements;
       }
       }
        else//和前一个数不一样
    {
         if(sign == false)
         return a[i];
         else
    {
         if(i == a.length-1)//如果是最后一个元素
        {
          return a[i];
         }
        else
         temp = a[i];
    }
    }
    }
      

  8.   

    没调试,这次应该对了
    int getNumber(int a[])
    {
    if(a==null)
    {
       System.out.println("error");
       return ErrorCode;//错误码自己选
    }
    int temp = a[0];
    boolean sign = false;
        for(int i = 1;i < a.length; i++)
    {
        if(a[i] == temp)
      {
         sign = true;
        if(i == a.length-1)//是最后一个元素
       {
         return NoElements;
       }
       }
        else//和前一个数不一样
    {
         if(sign == false)
         return a[i-1];//上贴中错了
         else
    {
         if(i == a.length-1)//如果是最后一个元素
        {
          return a[i];
         }
        else
         temp = a[i];
    }
    }
    }
      

  9.   

    kingmaxno1(学会飞翔)的想法是错误的,若数组很大,相应的扫描代价就太大,最坏的情况是全部是单元素的大数组,效率会降到最低
      

  10.   

    public static int getMin(int a[]){
         int ret=Integer.MAX_VALUE;
         for(int i=0;i<a.length;i++){
         boolean b=true;
         for(int j=0;j<a.length;j++){
         if(i!=j && a[i]==a[j]) {b=false;break;} 
         }
         if(b && a[i]<ret) ret=a[i];
         }
         return ret;
        }
      

  11.   

    public int getMin(int[] a) {
        int result = -1;
        boolean flag = false;
        result = a[0];
        if (a == null) {
          return -1;
        }
        if (a.length == 1) {
          return result;
        }
        for (int i = 1; i < a.length; i++) {
          if (result == a[i]) {
            flag = true;
          }
          else {
            if (flag) {
              flag = false;
              result = a[i];
            }
            else {
              return result;
            }
          }
        }
        if (!flag) {
          return result;
        }
        return -1;
      }
      

  12.   

    既然人家都说已经排好序了
    只需找出第一个单数即可
       int i=0;
         while(i<a.length-1){
         i++;
         if(a[i]!=a[i+1]&&a[i]==a[i-1])//
         continue;
         if(a[i]==a[i+1])
         i+=2;
         if(a[i]!=a[i+1]&&a[i]!=a[i-1])
         break;    
         }
      

  13.   

    int a [] = {3,3,4,4,5,6,6,7,7,8,8,9,9,9};

    int min=0,next=0;
    min=a[0];
    for(int i=1;i<a.length;i++){
    if(next==1){
    min=a[i];

    next=0;
    continue;
    }
    if(a[i]>min){
    ;
    }
    else if(a[i]<min){
    min=a[i];
    }
    else{
    next=1;
    }
    }

    System.out.println(min);
      

  14.   

    直接有自带类不是更好吗?
    Array类啊,然后再比较一下相邻两个数值是否相等;
      

  15.   

    Arrays.sort(a);
    int find(int[] a)
    {
       for(int i=0;i<a.length-1;i++)
         if(a[i]!=a[i+1])
           return a[i];
       return a[a.length-1];
    }