在数组中按值查找平均元素

时间:2014-01-08 11:39:59

标签: arrays

我有一个整数元素数组。我需要按值找到一个平均元素。元素的数量是奇数,元素不能重复。 例如,我有一个数组A [5] = {100,43,55,34,68}。所以元素将是55.问题是我需要保留我的数组,我不能使用任何额外的数组,我也不能排序这个数组。

我正在考虑找到数组的平均值,然后找到与此值最接近的元素,但对于真正不同的数字,它将无效。

2 个答案:

答案 0 :(得分:0)

如果你想在使用恒定内存量的同时执行这项任务(我认为这就是你所说的,不允许使用额外的数组),那么在线性时间内完成这项任务是不可能的。

更重要的是,如果不改变阵列并且不允许就地排序,则也不可能在O(nlogn)时间内执行。

你留下了天真的方法:

int NaiveFindMedian(int[] A){
    int i, j, count;

    for (i = 0; i < A.length){
        count = 0;
        for (j = 0; j < A.length; j++)
            if (A[j] < A[i]) count++;

        if (count == (A.length-1)/2) return i;
    }
}

显然这是昂贵的计算(O(n^2)),但这是使用O(1)内存的代价。如果您允许O(n)内存,则可以在O(n)时间内执行此任务。

答案 1 :(得分:0)

使用此代码查找数组的平均值和数组元素中的最近值

import java.util.Scanner;


    public class AA {
        public static void main(String[] args) {


    float b=0,j = 0;
    float c;
    int l = 0;
    Scanner s1=new Scanner(System.in);
    int x=s1.nextInt();
    int[]a =new int[x];
    for(int i=0;i<a.length;i++)
    {
         a[i]=s1.nextInt(); 
    }
      for(int i=0;i<a.length;i++)
      {
         b=b+a[i]; 
      }
      float g=a.length;
      c=b/g;
      System.out.println("Average="+c);
      for(int k=0;k<a.length;k++)
        {
            for(int h=1+k;h<a.length;h++)
            {
                if(b>a[h])
                {   
                    b=a[h];
                    int temp=a[h];
                    a[h]=a[k];
                    a[k]=temp;
                }
            }       
        if(l<a.length-1)
        {
                b=a[++l];

        }
        }
      for(int i=0;i<a.length;i++)
      {
         if(c<a[i])
         {
             float v=a[i]-c;
             float s=a[i-1]-c;
             if(s<0)
             {
                  j=s*(-1);
             }
             if(v==j)
                     {
                         System.out.println("Array Element NearBy="+a[i-1]+" or "+a[i]);
                     }
             else if(v>j)
             {
                 System.out.println("Array Element NearBy="+a[i-1]); 
             }
             else
             {
                 System.out.println("Array Element NearBy="+a[i]); 
             }
             break;
         }
      }
        }

    }