-2

数値を含む have 配列 (例: ) 1,2,3,4,5

配列全体の平均に最も近い値を持つ要素を返す必要があります。例えば、

1+2+3+4+5=15
15/5=3

結果は数字の 3 になるはずです。

平均と同じ数値がない場合、結果は配列から最も近い数値になります。

その値を返すメソッドだけが必要です。

Integer sum = 0; 
Integer a = 0;
for(int i=0; i<array.getLength();i++)
{
   a = array.get(i); sum=sum+a; 
}
 Integer average= sum/array.getLength();
 return average;
}

私はこれを試しましたが、最も近いものではなく、平均として正確な値のみを返します。

4

3 に答える 3

1

これが簡単な解決策です。おそらく、配列がソートされている場合、配列から最も近い値を取得するために、より巧妙なアルゴリズムを使用できます。両方とも平均値に最も近い 2 つの数値がある場合は、配列内で最初に出現する数値が選択されます。

編集により比較が変更され、平均に最も近い最小数が検出されました。

public static Integer nearestToAverage(int[] res) {
    if (res.length < 1) {
        return null; //if there is no array return null;
    }
    int sum = 0; //variable to sum up the array
    for (int i = 0; i < res.length; i++) {
        int act = res[i];
        sum += act; //adding elements of array to sum
    }
    int avg = sum / res.length; //computing the average value
    int minDistance = Integer.MAX_VALUE; //set distance to integer max so it is higher than any of values in array
    Integer ret = null; //setting return value to null it will be replaced with value from array
    for (int i = 0; i < res.length; i++) {
        int act = res[i];
        int actDistance = Math.abs(act - avg); //computing distance of actual value and average
        if ((actDistance < minDistance) || ((actDistance == minDistance) && (act < ret))) { //if it is less than actual minimal distance or it is the same and act number is lower than return value
            minDistance = actDistance; //the distance is set to new
            ret = act; //also is return value
        }
    }
    return ret;
}
于 2012-10-23T11:06:39.413 に答える
0

これを試して ::

int[] arr = {1,2,3,4,5};
double closeDiff = 0;
double arravg = getAverage(arr); // write a method which will return the average
int resultIndex = 0;

for(int i=1;i<arr.length;i++)
{

  if(arr[i-1] > arr[i])
  tempDiff = (arr[i-1] - arr[i]);
  else
    tempDiff = (-arr[i-1] + arr[i]);
  if(tempDiff<closeDiff)
   resultIndex = i;
}
return arr[i];
于 2012-10-23T10:48:54.750 に答える