配列から最も近い数を取得


163

マイナス1000からプラス1000までの数値があり、数値が入った配列があります。このような:

[2, 42, 82, 122, 162, 202, 242, 282, 322, 362]

取得した数を配列の最も近い数に変更したい。

たとえば、私は80それが取得したい数として取得し82ます。


2
あり得ないほど単純です。変数を脇に置きx、配列を1つずつi調べて、配列内の現在の数値と比較します。その差iがの現在の値よりも小さい場合は、現在の配列番号にx設定xします。終了xするiと、配列から最も近い番号になります。
だます

回答:


208

ES5バージョン:

var counts = [4, 9, 15, 6, 2],
  goal = 5;

var closest = counts.reduce(function(prev, curr) {
  return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});

console.log(closest);


1
欠点は、reduceのコールバックが宣言された変数と同じスコープから呼び出された場合にのみ機能することです。goalreduceに渡すことはできないため、グローバルスコープから参照する必要があります。
7yl4r、2015

5
高次関数を使用してそれを行うこともできます。
dmp '25

3
@ 7yl4rまたはそれを関数にラップしますか?;)
ドミニク

1
@ 7yl4r本当に...バインドを使用してこれを実現できます... ---------- // reducer.js function reducer(goal、prev、curr){return(Math.abs(curr-ゴール)<Math.abs(prev-ゴール)?curr:prev); } // main.js変数の数= [4、9、15、6、2]、目標= 5; counts.reduce(reducer.bind(null、Goal)); ----------コメントにコードを挿入する方法がわかりません。
マウリシオソアレス

これはすべてのアイテムを反復しますが、リストが順序付けられている場合は最適ではありませんが、小さなリストでは問題ありません。バイナリ検索を行わなくても、次の数値がそれ以上の場合、ループが終了する可能性があります。
ドミニク

144

以下は、手続き型言語に変換できる疑似コードです。

array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
number = 112
print closest (number, array)

def closest (num, arr):
    curr = arr[0]
    foreach val in arr:
        if abs (num - val) < abs (num - curr):
            curr = val
    return curr

与えられた数と各配列要素の間の絶対差を計算し、最小の差を持つものの1つを返します。

値の例:

number = 112  112  112  112  112  112  112  112  112  112
array  =   2   42   82  122  162  202  242  282  322  362
diff   = 110   70   30   10   50   90  130  170  210  250
                         |
                         +-- one with minimal absolute difference.

概念の証明として、これを私がこれを実際に示すために使用したPythonコードを次に示します。

def closest (num, arr):
    curr = arr[0]
    for index in range (len (arr)):
        if abs (num - arr[index]) < abs (num - curr):
            curr = arr[index]
    return curr

array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
number = 112
print closest (number, array)

また、Javascriptで本当に必要な場合は、機能を実際に示す完全なHTMLファイルを以下で参照してください。

<html>
    <head></head>
    <body>
        <script language="javascript">
            function closest (num, arr) {
                var curr = arr[0];
                var diff = Math.abs (num - curr);
                for (var val = 0; val < arr.length; val++) {
                    var newdiff = Math.abs (num - arr[val]);
                    if (newdiff < diff) {
                        diff = newdiff;
                        curr = arr[val];
                    }
                }
                return curr;
            }
            array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
            number = 112;
            alert (closest (number, array));
        </script>
    </body>
</html>

ここで、たとえば、データアイテムがソートされている場合(サンプルデータから推測できるが明示的に述べていない場合)は、効率を向上させる余地があることに注意してください。たとえば、バイナリ検索を使用して最も近いアイテムを見つけることができます。

また、1秒間に回も実行する必要がない限り、データセットが大幅に大きくならない限り、効率の向上はほとんど気付かれないことにも留意してください。

あなたがいる場合そのように試してみたい(と配列を昇順にソートされて保証することができます)、これは出発点は良いです。

<html>
    <head></head>
    <body>
        <script language="javascript">
            function closest (num, arr) {
                var mid;
                var lo = 0;
                var hi = arr.length - 1;
                while (hi - lo > 1) {
                    mid = Math.floor ((lo + hi) / 2);
                    if (arr[mid] < num) {
                        lo = mid;
                    } else {
                        hi = mid;
                    }
                }
                if (num - arr[lo] <= arr[hi] - num) {
                    return arr[lo];
                }
                return arr[hi];
            }
            array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
            number = 112;
            alert (closest (number, array));
        </script>
    </body>
</html>

これは基本的に、中央の値のブラケット化とチェックを使用して、反復ごとにソリューションスペースを半分に削減しO(log N)ます。これは、上記の逐次検索ではO(N)次のような古典的なアルゴリズムでした。

0  1  2   3   4   5   6   7   8   9  <- indexes
2 42 82 122 162 202 242 282 322 362  <- values
L             M                   H  L=0, H=9, M=4, 162 higher, H<-M
L     M       H                      L=0, H=4, M=2, 82 lower/equal, L<-M
      L   M   H                      L=2, H=4, M=3, 122 higher, H<-M
      L   H                          L=2, H=3, difference of 1 so exit
          ^
          |
          H (122-112=10) is closer than L (112-82=30) so choose H

述べたように、それは小さなデータセットや盲目的に高速である必要のないものにとっては大きな違いはないはずですが、それはあなたが考慮したいオプションかもしれません。


2
@micha、私は同等のJSコードを答えに追加しました。言語を私がより
慣れ親しん

2
データセットが大きい場合、このアルゴリズムの実行時間は長くありません。
ylun.ca 2015

4
@ ylun.ca、データの並べ替えに関する質問には明示的なステートメントがないため(例は並べ替えられていますが、偶然かもしれません)、O(n)よりも効率を上げることはできません。いずれの場合も、そのサイズのデータ​​セットの場合、効率はほとんど関係ありません。しかし、あなたの主張は有効です。そのため、回答をより完全なものにするために、その影響にメモを追加します。
paxdiablo

1
何度も賛成票を投じられれば幸いです。スタックオーバーフローに関するより多くの答えはそれらにこの種の努力を入れるべきです。
Richard Vanbergen 2017年

48

ES6(2015)バージョン:

const counts = [4, 9, 15, 6, 2];
const goal = 5;

const output = counts.reduce((prev, curr) => Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);

console.log(output);

再利用性のために、プレースホルダーをサポートするカレー関数でラップできます(http://ramdajs.com/0.19.1/docs/#curryまたはhttps://lodash.com/docs#curry)。これにより、必要に応じて柔軟性が大幅に向上します。

const getClosest = curry((counts, goal) => {
  return counts
    .reduce((prev, curr) => Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
});

const closestTo5 = getClosest(_, 5);
const closestTo = getClosest([4, 9, 15, 6, 2]);

24

次として働くコード:

var array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

function closest(array, num) {
  var i = 0;
  var minDiff = 1000;
  var ans;
  for (i in array) {
    var m = Math.abs(num - array[i]);
    if (m < minDiff) {
      minDiff = m;
      ans = array[i];
    }
  }
  return ans;
}
console.log(closest(array, 88));


8
多いほどもっと良いでしょう。
ホットリックス

6
JavaScriptのみを使用するため、これはより良いソリューションであると私は主張します。受け入れられた回答は、元の質問で言及されていなかったjQueryを使用し、この質問を見ている他の人は使用していない可能性があります。
Sean the Bean

17

ソートされていない配列で動作します

ここにはいくつかの優れたソリューションが掲載されていますが、JavaScriptは柔軟な言語であり、さまざまな方法で問題を解決するためのツールを提供します。もちろん、それはすべてあなたのスタイルにかかっています。コードがより機能的である場合は、reduceバリエーションが適切であることがわかります。

  arr.reduce(function (prev, curr) {
    return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
  });

ただし、コーディングスタイルによっては、読みにくい場合があります。したがって、私は問題を解決する新しい方法を提案します:

  var findClosest = function (x, arr) {
    var indexArr = arr.map(function(k) { return Math.abs(k - x) })
    var min = Math.min.apply(Math, indexArr)
    return arr[indexArr.indexOf(min)]
  }

  findClosest(80, [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]) // Outputs 82

を使用して最小値を見つける他のアプローチとは異なりMath.min.applyこれは入力配列arrをソートする必要がありません。インデックスを気にする必要も、事前にソートする必要もありません。

わかりやすくするために、コードを1行ずつ説明します。

  1. arr.map(function(k) { return Math.abs(k - x) })新しい配列を作成し、基本的に、指定された数値(の数値arr)から入力数値(x)を引いた値の絶対値を格納します。次に最小の数を探します(これは入力数に最も近い数でもあります)。
  2. Math.min.apply(Math, indexArr) これは、前に作成した配列の最小数を見つける正当な方法です(それ以上はありません)。
  3. arr[indexArr.indexOf(min)]これはおそらく最も興味深い部分です。最小の数を見つけましたが、最初の数(x)を追加する必要があるか、減算する必要があるかわかりません。以前Math.abs()は違いを見つけていたからです。ただし、array.map(論理的に)入力配列のマップを作成し、インデックスを同じ場所に保ちます。したがって、最も近い数を見つけるには、指定された配列で見つかった最小値のインデックスを返しindexArr.indexOf(min)ます。

それを示すビンを作成しました。


1
私にはわかりませんが3n、2016年に答えたとしても実際にはES5であり、この質問をしたこのnoobが明らかにプログラマではなかったとしても、他のソリューションで問題ないので、パフォーマンスに疑問があるかもしれません。
noob 2016年

1
ええ、あなたが学んでいるのを見るのは素晴らしいことです!ちなみに、パフォーマンスの疑いについてのみ説明しましたが、実際にはパフォーマンスが悪いとは言いませんでしたが、数値を実行しましたが、O(n)ソリューションではO(log n)、乱数に対して@paxdiabloよりも100k ops / sec程度少なくなっています。アルゴリズムを設計するときは常に最初にソートします。(あなたがあなたが何をしているかを知っていて、あなたをバックアップするためのベンチマークを持っている場合を除いて。)
noob

1
シンプルなソリューションの小道具。(私はnoobのがないよう事前にソートされた配列を持つことの贅沢を持っていません。)私のユースケースのために素晴らしい作品
jaggedsoft

2
あなたはfindClosestが、それはすべてのアレイ上で再利用可能にするためにコールバック関数を減らす返すことができます: const findClosest = goal => (a,b) => Math.abs(a - goal) < Math.abs(b - goal) ? a : b;
ヤコブE

1
例: [2, 42, 82, 122, 162, 202, 242, 282, 322, 362].reduce(findClosest(80))
Jakob E

11

並べ替えられた配列(線形検索)

これまでのすべての答えは、配列全体を検索することに集中しています。あなたの配列がすでにソートされており、最も近い数だけが本当に必要であることを考えると、これがおそらく最も速い解決策です:

var a = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
var target = 90000;

/**
 * Returns the closest number from a sorted array.
 **/
function closest(arr, target) {
  if (!(arr) || arr.length == 0)
    return null;
  if (arr.length == 1)
    return arr[0];

  for (var i = 1; i < arr.length; i++) {
    // As soon as a number bigger than target is found, return the previous or current
    // number depending on which has smaller difference to the target.
    if (arr[i] > target) {
      var p = arr[i - 1];
      var c = arr[i]
      return Math.abs(p - target) < Math.abs(c - target) ? p : c;
    }
  }
  // No number in array is bigger so return the last.
  return arr[arr.length - 1];
}

// Trying it out
console.log(closest(a, target));

アルゴリズムは、たとえばバイナリツリーを使用して大幅に改善できることに注意してください。


ここでのこの戦略は良いですが、これにはいくつかのタイプミスがあります。例、a[i]またはi[0]
ウェズリーワークマン2017年

1
ありがとう、@ WesleyWorkman。修正しただけです。私はすべてを手に入れたと思います。ちなみに、他人の回答を編集することもできます。
Hubert Grzeskowiak

より高い最も近い値を取得するために、上記で回答したコードを修正する必要があるのはどこですか?例:[110、111、120、140、148、149、155、177、188、190] 150を検索すると、149ではなく155が表示されます。手伝ってくれませんか。おかげで
user1199842

9

すべてのソリューションは過剰に設計されています。

それは次のように簡単です:

const needle = 5;
const haystack = [1, 2, 3, 4, 5, 6, 7, 8, 9];

haystack.sort((a, b) => {
  return Math.abs(a - needle) - Math.abs(b - needle);
});

// 5

1
実際、はるかに重要な点です。ただし、「配列から最も近い数を取得する」には、ソートされた配列から最初の要素を選択する必要があります。
Shaya Ulman

6

このソリューションでは、条件が満たされた場合に反復を停止できるES5 存在量指定子 Array#someを使用します。

とは逆にArray#reduce、1つの結果に対してすべての要素を繰り返す必要はありません。

コールバック内deltaで、検索された値と実際の値の間の絶対値itemが取得され、最後のデルタと比較されます。差分がある他のすべての値は実際の値よりも大きいため、これ以上の場合、反復は停止します。

場合はdelta、コールバックには小さく、実際のアイテムが結果に割り当てられ、delta中に保存されますlastDelta

最後に、以下のの例のように、デルタが等しい小さな値が取得され、22結果はになり2ます。

より大きな値の優先度がある場合は、デルタチェックを以下から変更する必要があります。

if (delta >= lastDelta) {

に:

if (delta > lastDelta) {
//       ^^^ without equal sign

これは22、結果42(より大きな値の優先度)で得られます。

この関数は、配列内の値をソートする必要があります。


優先順位が小さい値のコード:

function closestValue(array, value) {
    var result,
        lastDelta;

    array.some(function (item) {
        var delta = Math.abs(value - item);
        if (delta >= lastDelta) {
            return true;
        }
        result = item;
        lastDelta = delta;
    });
    return result;
}

var data = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

console.log(21, closestValue(data, 21)); // 2
console.log(22, closestValue(data, 22)); // 2  smaller value
console.log(23, closestValue(data, 23)); // 42
console.log(80, closestValue(data, 80)); // 82

より大きな値の優先度を持つコード:

function closestValue(array, value) {
    var result,
        lastDelta;

    array.some(function (item) {
        var delta = Math.abs(value - item);
        if (delta > lastDelta) {
            return true;
        }
        result = item;
        lastDelta = delta;
    });
    return result;
}

var data = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

console.log(21, closestValue(data, 21)); //  2
console.log(22, closestValue(data, 22)); // 42 greater value
console.log(23, closestValue(data, 23)); // 42
console.log(80, closestValue(data, 80)); // 82


だから、あなたは与えられた配列がソートされていると仮定します...それはあなたを地獄から多くの時間を節約します。
Redu

1
opの配列はソートされているように見えるので、はい:)
Nina Scholz

最初のソリューションは、同じ数を2回含む入力で中断します。例closestValue([ 2, 2, 42, 80 ], 50) === 2
セバスチャンヴァーカンメン

@SébastienVercammen、opのデータは一意であり、並べ替えられています。
Nina Scholz、

@NinaScholz OP は、「配列に数値が含まれている」「配列の最も近い数値に変更した数値を取得したいとのみ判断しました。配列の例は、ほんの一例です。配列は一意のエントリを保証しません。
セバスチャンヴァーカンメン

4

ES6

ソートされた配列とソートされていない配列で動作します

整数と浮動小数点数、文字列を歓迎

/**
 * Finds the nearest value in an array of numbers.
 * Example: nearestValue(array, 42)
 * 
 * @param {Array<number>} arr
 * @param {number} val the ideal value for which the nearest or equal should be found
 */
const nearestValue = (arr, val) => arr.reduce((p, n) => (Math.abs(p) > Math.abs(n - val) ? n - val : p), Infinity) + val

例:

let values = [1,2,3,4,5]
console.log(nearestValue(values, 10)) // --> 5
console.log(nearestValue(values, 0)) // --> 1
console.log(nearestValue(values, 2.5)) // --> 2

values = [100,5,90,56]
console.log(nearestValue(values, 42)) // --> 56

values = ['100','5','90','56']
console.log(nearestValue(values, 42)) // --> 56

3

古い質問に答えるのかどうかはわかりませんが、この投稿はGoogle検索で最初に表示されるため、ここに私のソリューションと2cを追加することをお許しください。

怠惰な私は、この質問の解決策がLOOPであるとは信じられなかったので、もう少し検索してフィルター機能を使用しました

var myArray = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
var myValue = 80;

function BiggerThan(inArray) {
  return inArray > myValue;
}

var arrBiggerElements = myArray.filter(BiggerThan);
var nextElement = Math.min.apply(null, arrBiggerElements);
alert(nextElement);

それで全部です !


1
では、下限についてはどうでしょうか?常に次に高い値を使用します。しかし、あなたのアプローチはgoog.math.clamp、配列だけで下限を気にせずに(Googleクロージャー)を思い出させます。
noob 2014

ソリューションは、配列から次に大きい数値を返します。最も近い値も正確な値も見つかりません。
Hubert Grzeskowiak 2014

2

同様の質問への私の答えは関係も説明し、それは単純なJavascriptですが、バイナリ検索を使用していないため、O(logN)ではなくO(N)です。

var searchArray= [0, 30, 60, 90];
var element= 33;

function findClosest(array,elem){
    var minDelta = null;
    var minIndex = null;
    for (var i = 0 ; i<array.length; i++){
        var delta = Math.abs(array[i]-elem);
        if (minDelta == null || delta < minDelta){
            minDelta = delta;
            minIndex = i;
        }
        //if it is a tie return an array of both values
        else if (delta == minDelta) {
            return [array[minIndex],array[i]];
        }//if it has already found the closest value
        else {
            return array[i-1];
        }

    }
    return array[minIndex];
}
var closest = findClosest(searchArray,element);

https://stackoverflow.com/a/26429528/986160


2

Fusionからのアプローチは好きですが、小さなエラーがあります。そのようにそれは正しいです:

    function closest(array, number) {
        var num = 0;
        for (var i = array.length - 1; i >= 0; i--) {
            if(Math.abs(number - array[i]) < Math.abs(number - array[num])){
                num = i;
            }
        }
        return array[num];
    }

また、改良されたforループを使用しているため、少し高速です。

最後に、私はこのような関数を書きました:

    var getClosest = function(number, array) {
        var current = array[0];
        var difference = Math.abs(number - current);
        var index = array.length;
        while (index--) {
            var newDifference = Math.abs(number - array[index]);
            if (newDifference < difference) {
                difference = newDifference;
                current = array[index];
            }
        }
        return current;
    };

私はそれをテストしましたconsole.time()が、他の関数よりもわずかに高速です。


ねえ、それがなぜなのか説明してくれませimproved for loopんか?逆ループは、常にパフォーマンスが向上するとは限りません。
A1rPun 2016年

.length宣言するときi、このループでは、1回だけ評価します。しかし、私はvar i = arr.length;while (i--) {}もっと速くなると思います
Jon

回答を更新しました。に変更しましたwhile。今ではさらに高速です。
Jon

0

配列のわずかに変更されたバイナリ検索が機能します。


3
ああ、それは奇妙です-明らかに誰かがバイナリ検索を好きではありません。(それが最善の一般的な解決策であると考えていても。)
Hot Licks

0

範囲が狭い場合、最も簡単なのは、たとえば80番目のエントリの値が82であるマップ配列を使用して、例を使用することです。はるかに大きくまばらな範囲の場合、おそらくバイナリ検索が最適です。

クエリ言語を使用すると、入力数値のいずれかの側の距離の値をクエリし、結果の縮小リストを並べ替えることができます。しかし、SQLには、「クリーン」なソリューションを提供するための「次へ」または「前へ」という優れた概念がありません。


0

ここでのもう1つのバリアントは、頭からつま先に接続する循環範囲があり、指定された入力に最小値のみを受け入れます。これは、暗号化アルゴリズムの1つの文字コード値を取得するのに役立ちました。

function closestNumberInCircularRange(codes, charCode) {
  return codes.reduce((p_code, c_code)=>{
    if(((Math.abs(p_code-charCode) > Math.abs(c_code-charCode)) || p_code > charCode) && c_code < charCode){
      return c_code;
    }else if(p_code < charCode){
      return p_code;
    }else if(p_code > charCode && c_code > charCode){
      return Math.max.apply(Math, [p_code, c_code]);
    }
    return p_code;
  });
}

0
#include <algorithm>
#include <iostream>
#include <cmath>

using namespace std;

class CompareFunctor
{

public:
    CompareFunctor(int n) { _n = n; }
    bool operator()(int & val1, int & val2)
    {
        int diff1 = abs(val1 - _n);
        int diff2 = abs(val2 - _n);
        return (diff1 < diff2);
    }

private:
    int _n;
};

int Find_Closest_Value(int nums[], int size, int n)
{
    CompareFunctor cf(n);
    int cn = *min_element(nums, nums + size, cf);
    return cn;
}

int main()
{
    int nums[] = { 2, 42, 82, 122, 162, 202, 242, 282, 322, 362 };
    int size = sizeof(nums) / sizeof(int);
    int n = 80;
    int cn = Find_Closest_Value(nums, size, n);
    cout << "\nClosest value = " << cn << endl;
    cin.get();
}

0

最も効率的な方法は、バイナリ検索です。ただし、次の数値が現在の数値とさらに一致する場合単純なソリューションでも終了できます。ここでのほぼすべてのソリューションは、配列が順序付けされて全体が繰り返されることを考慮していません:/

const closest = (orderedArray, value, valueGetter = item => item) =>
  orderedArray.find((item, i) =>
    i === orderedArray.length - 1 ||
    Math.abs(value - valueGetter(item)) < Math.abs(value - valueGetter(orderedArray[i + 1])));

var data = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

console.log('21 -> 2', closest(data, 21) === 2);
console.log('22 -> 42', closest(data, 22) === 42); // equidistant between 2 and 42, select highest
console.log('23 -> 42', closest(data, 23) === 42);
console.log('80 -> 82', closest(data, 80) === 82);

これは非プリミティブでも実行できます。 closest(data, 21, item => item.age)

に変更findfindIndexて、配列のインデックスを返します。


順不同配列はどうですか?
EdG

順序付けられていない場合は、終了しない解決策の1つを取ります。ただし、何度も作業を行う場合は、配列を1回ソートする方が最適な場合があります。前述のように、配列が本当に大きい場合、線形検索よりもバイナリ検索の方が効率的です。
ドミニク

0

配列内で最も近い2つの数値を検索するには

function findTwoClosest(givenList, goal) {
  var first;
  var second;
  var finalCollection = [givenList[0], givenList[1]];
  givenList.forEach((item, firtIndex) => {
    first = item;

    for (let i = firtIndex + 1; i < givenList.length; i++) {
      second = givenList[i];

      if (first + second < goal) {
        if (first + second > finalCollection[0] + finalCollection[1]) {
          finalCollection = [first, second];
        }
      }
    }
  });

  return finalCollection;
}

var counts = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362]
var goal = 80;
console.log(findTwoClosest(counts, goal));

-5

以下は、複雑度O(nlog(n))の配列から数値に最も近い要素を見つけるためのコードスニペットです。

入力:-{1,60,0、-10,100,87,56}要素:-56配列内の最も近い数:-60

ソースコード(Java):

package com.algo.closestnumberinarray;
import java.util.TreeMap;


public class Find_Closest_Number_In_Array {

    public static void main(String arsg[]) {
        int array[] = { 1, 60, 0, -10, 100, 87, 69 };
        int number = 56;
        int num = getClosestNumber(array, number);
        System.out.println("Number is=" + num);
    }

    public static int getClosestNumber(int[] array, int number) {
        int diff[] = new int[array.length];

        TreeMap<Integer, Integer> keyVal = new TreeMap<Integer, Integer>();
        for (int i = 0; i < array.length; i++) {

            if (array[i] > number) {
                diff[i] = array[i] - number;
                keyVal.put(diff[i], array[i]);
            } else {
                diff[i] = number - array[i];
                keyVal.put(diff[i], array[i]);
            }

        }

        int closestKey = keyVal.firstKey();
        int closestVal = keyVal.get(closestKey);

        return closestVal;
    }
}

タグでJavaScriptを要求する投稿
Shannon Hochkins 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.