怎样优化此代码?
实现的功能:long a[nElems]为空返回-1,否则返回最大值,并删除此值。
目前用了三个FOR语句,怎样优化下?   public long removemax()
   {
   long b =0;
   int i;
   if(nElems==0)
  return -1;
   else {
   for (i=0;i<nElems;i++)
    if(b<a[i])
   b=a[i];   
   for (i=0;i<nElems;i++)
   if (b==a[i])
   break;
   for (;i<nElems;i++)
   a[i]=a[i+1];
    nElems--;
  return b;
 }
   }

解决方案 »

  1.   


    public int removemax(int[] array)
    {
    if(array.length<=0)
    {
    return -1;
    }
    else
    {
    int max=array[0];
    int temp=0;
    for(int i=1;i<array.length;i++)
    {
    if(max<array[i])
    {
    max=array[i];
    temp=i;
    }
    }
    //在这里根据temp 往前移位,移位注意数组最后一个数字,尤其最大值是最后一个
    return max;
    }

    }
      

  2.   

    谢谢!当时就在找怎样标记数组下标,没想出来,呵呵,刚学!现在已经缩了一个FOR,还有没有更好的方法?   public long removemax()
       {
       long b =a[0];
       int i,c=0;
       if(nElems==0)
      return -1;
       else {
       for (i=0;i<nElems;i++)
        {if(b<a[i])
       {b=a[i];
         c=i;}
        }
       for (;c<nElems;c++)
       a[c]=a[c+1];
        nElems--;
      return b;
     }
       }
      

  3.   


    public static int removeMax(int[] values) {
    if (values.length <= 0) {
    return -1;
    } else {
    int temp = 0;
    for (int i = 0; i < values.length; i++) {
    if (values[temp] < values[i]) {
    temp = i;
    }
    }
    // 下边把最大值和数组最后一个值换掉。
    values[temp] ^= values[values.length - 1];
    values[values.length - 1] ^= values[temp];
    values[temp] ^= values[values.length - 1]; return values[values.length - 1];
    } }LZ 只能把最大值给换数组最后边了
    JAVA里没有返回2个值的机制,也没法引用传递
    可以再再外边处理那最个最大的值,因为已经知道在数组最后了
      

  4.   

    好像没有了吧,第一个for是必须的,找出最大值及其下标,第2个用于移动。
    这是数组中的元素删除,又不是链表之类的,删除一个元素必须for一次
      

  5.   

    这个方法很不错,值借鉴!对无序数组很有用。
    但如果是有序数组可能还是要用FOR了。
      

  6.   

    public static void main(String[] args) {
    String number = "000000";
    String id = "310141597210452232";
    String all = id + number;
    byte[] messages = all.getBytes();
    for (int i = 0; i < messages.length; i++) {
    System.out.println(messages[i]);
    }
    byte[][] strArray = new byte[3][messages.length / 3];
    if (messages.length % 3 == 0) {
    for (int i = 0; i < 3; i++) {
    strArray[i] = new String(messages, i * messages.length / 3, 8)
    .getBytes();
    }
    }
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 8; j++) {
    System.out.print(strArray[i][j]);
    }
    System.out.println();
    }
    }
      

  7.   

    a ^= b;
    就是 a = a ^ b;
    是异或的意思 按位对比2数 相同为0,不同为1;