Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptでの絶対値の合計の最小化


整数のソートされた配列が与えられたとしましょう。それをarrと呼びましょう。 −

の値となるような整数xを見つける必要があります
abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)

は可能な限り最小です(ここでabsは絶対値を示します)。考えられる答えがいくつかある場合は、最小のものを出力してください。

例-

のために、

arr = [2, 4, 7],

出力は-

である必要があります
absoluteValuesSumMinimization(arr) = 4

なぜなら、abs(2-4)+ abs(4-4)+ abs(7-4)=5であり、これは任意の数で達成できる最小のものです。

私たちはそれを知っています、

arr.length/2

半分の長さを返します。

偶数の長さの配列の場合、これは中央の右側になります。奇数の長さの配列の場合は、中央になります。

  • Math.ceil(arr.length / 2)は必要に応じて切り上げられるため、5の配列の中央は2.5-> 3になります。これにより、奇数の長さの配列が1つずれます。

  • Math.ceil(arr.length / 2)-1は1つのインデックスを下げます。これにより、すべてのアレイのオフバイワンエラーが修正されます。

以下はコードです-

const arr = [2, 4, 7];
const absoluteValuesSumMinimization = (arr = []) => {
   const res = [];
   arr.forEach(num => {
      const sum = arr.reduce((accum, next) => {
         return accum + Math.abs(next - num);
      }, 0);
      res.push(sum);
   });
   const lowest = Math.min(...res);
   return arr[res.indexOf(lowest)];
};
console.log(absoluteValuesSumMinimization(arr));

出力

以下はコンソールでの出力です-

4

  1. JavaScript配列のすべての一意の値を取得するにはどうすればよいですか?

    以下は、JavaScript配列内のすべての一意の値を取得するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>

  2. JavaScriptを使用した配列内のネストされたオブジェクト値の合計

    以下は、JavaScriptを使用して配列内のネストされたオブジェクト値を合計するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <st