リスト内の連結されたすべての整数のペアの合計を見つけるための効率的なアルゴリズム

STOPIMACODER:

私はインタビューの練習の1つでこの問題を抱えていて、O(N ^ 2)以外のより複雑な時間でこれを取得するのに問題がありました。あるレベルでは、リストの各要素にアクセスする必要があります。ハッシュテーブルを使用することを考えましたが、それでもハッシュテーブルを実行してデータを入力してから計算する必要があります。基本的に私の解決策はネストされたforループで、コードも含まれていて、4秒未満の時間例外を除いてすべてを渡しました。

私のコード:

def concatenationsSum(a):
    sum = 0
    current_index_looking_at = 0
    for i in a:
        for x in a:
            temp = str(i)+str(x)
            sum += int(temp)
    return sum

問題の説明:

Given an array of positive integers a, your task is to calculate the sum
of every possible a[i] ∘ a[j], where a[i] ∘ a[j] is the concatenation
of the string representations of a[i] and a[j] respectively.
    
    Example
    
    For a = [10, 2], the output should be concatenationsSum(a) = 1344.
    
    a[0] ∘ a[0] = 10 ∘ 10 = 1010,
    a[0] ∘ a[1] = 10 ∘ 2 = 102,
    a[1] ∘ a[0] = 2 ∘ 10 = 210,
    a[1] ∘ a[1] = 2 ∘ 2 = 22.
    So the sum is equal to 1010 + 102 + 210 + 22 = 1344.
    
    For a = [8], the output should be concatenationsSum(a) = 88.
    
    There is only one number in a, and a[0] ∘ a[0] = 8 ∘ 8 = 88, so the answer is 88.
    
    Input/Output
    
    [execution time limit] 4 seconds (py3)
    
    [input] array.integer a
    
    A non-empty array of positive integers.
    
    Guaranteed constraints:
    1 ≤ a.length ≤ 10^5,
    1 ≤ a[i] ≤ 10^6.
    
    [output] integer64
    
    The sum of all a[i] ∘ a[j]s. It's guaranteed that the answer is less than 2^53.
Ry-:

2つの整数の連結:

m ∘ n

等しい:

10**digit_length(n) * m + n

したがって、指定された整数を持つすべてのリスト項目の連結の合計:

(a[0] ∘ n) + (a[1] ∘ n) + …

等しい:

(10**digit_length(n) * a[0] + n) + (10**digit_length(n) * a[1] + n) + …

そして、すべてのnを片側に置くことができます

(10**digit_length(n) * a[0]) + (10**digit_length(n) * a[1]) + … + n + n + …

配列の各要素には、nにのみ依存する値が乗算されることに注意してください

10**digit_length(n) * (a[0] + a[1] + …) + n + n + …

再び簡素化:

10**digit_length(n) * sum(a) + len(a) * n

sum(a)は変化せず、len(a) * nすべてnのsのs の合計len(a) * sum(a)次のとおりです

def concatenationsSum(a):
    sum_a = sum(a)
    return sum(10**digit_length(n) * sum_a for n in a) + len(a) * sum_a


def digit_length(n):
    """
    The number of base-10 digits in an integer.

    >>> digit_length(256)
    3

    >>> digit_length(0)
    1
    """
    return len(str(n))

これは、関係する整数の上限が一定である場合、線形時間で実行されます。を使用math.log10してdigit_length、浮動小数点演算が関係する整数サイズに対して十分正確である限り、高速化することもできます(そうでない場合でも、文字列を使用するよりも実装するための優れた方法があります。 。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「最大連結集合」を見つけるための効率的なアルゴリズムはありますか?

分類Dev

一連の無限線のすべての交点を見つけるための効率的なアルゴリズムはありますか?

分類Dev

有向グラフの弱連結成分をすべて見つけるためのアルゴリズム

分類Dev

2つのアルゴリズムの効率比較:行方向/列方向にソートされた行列内の負の整数の数を見つけます

分類Dev

すべてのパス合計を見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

AからZまでのすべてのパスを見つけるための効率的なアルゴリズム?

分類Dev

NxNグリッド内のすべてのパスを見つけるためのアルゴリズム

分類Dev

2つのセットのORを見つけるためのより効率的なアルゴリズム

分類Dev

オブジェクト内のすべてのアイテムの組み合わせを取得するための効率的なアルゴリズム

分類Dev

リソースの最も効率的な使用法を見つけるためのアルゴリズム

分類Dev

Pythonのリスト内で利用可能な場所をランダムに見つけるための効率的なアルゴリズム

分類Dev

サイクルを誘発するすべてのエッジを見つけるための効率的なアルゴリズム

分類Dev

ソートされた配列の部分的に絶対合計の中央値を計算するための効率的なアルゴリズム

分類Dev

指定された値まで合計する配列内の2つの要素を見つけるためのより良いアルゴリズム

分類Dev

最大合計を見つけるための整数のnxn行列の動的計画法アルゴリズム

分類Dev

すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

すべての極大値を見つけるために最適化されたアルゴリズム

分類Dev

リスト内の3つの異なる要素を見つけるためのO(log n)アルゴリズムを設計する

分類Dev

2つの大きなリストを交差させるための効率的なアルゴリズム

分類Dev

最新の更新されたjsonを見つけるための効果的なアルゴリズム

分類Dev

文字列112123123412345のn番目の桁を見つけるための効率的なアルゴリズム

分類Dev

黄金比を計算するためのElispの効率的なアルゴリズム

分類Dev

グラフ重心を見つけるための効率的なアルゴリズムとは何ですか?

分類Dev

非常に大きな数の整数平方根を1桁ずつ見つけるための効率的なアルゴリズムは何ですか?

分類Dev

与えられた内積と別のリストを見つけるためのアルゴリズム

分類Dev

同じリスト内の要素を比較するための効率的なアルゴリズム

分類Dev

ダブルスとサブセットを持つサブセットを見つけるための効率的なアルゴリズムは一緒です

分類Dev

範囲内に余りがない数で割り切れる数の数を見つけるための効率的なアルゴリズム

分類Dev

無向グラフで最長のサイクルの長さを見つけるための効率的なアルゴリズムはありますか?

Related 関連記事

  1. 1

    「最大連結集合」を見つけるための効率的なアルゴリズムはありますか?

  2. 2

    一連の無限線のすべての交点を見つけるための効率的なアルゴリズムはありますか?

  3. 3

    有向グラフの弱連結成分をすべて見つけるためのアルゴリズム

  4. 4

    2つのアルゴリズムの効率比較:行方向/列方向にソートされた行列内の負の整数の数を見つけます

  5. 5

    すべてのパス合計を見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

  6. 6

    AからZまでのすべてのパスを見つけるための効率的なアルゴリズム?

  7. 7

    NxNグリッド内のすべてのパスを見つけるためのアルゴリズム

  8. 8

    2つのセットのORを見つけるためのより効率的なアルゴリズム

  9. 9

    オブジェクト内のすべてのアイテムの組み合わせを取得するための効率的なアルゴリズム

  10. 10

    リソースの最も効率的な使用法を見つけるためのアルゴリズム

  11. 11

    Pythonのリスト内で利用可能な場所をランダムに見つけるための効率的なアルゴリズム

  12. 12

    サイクルを誘発するすべてのエッジを見つけるための効率的なアルゴリズム

  13. 13

    ソートされた配列の部分的に絶対合計の中央値を計算するための効率的なアルゴリズム

  14. 14

    指定された値まで合計する配列内の2つの要素を見つけるためのより良いアルゴリズム

  15. 15

    最大合計を見つけるための整数のnxn行列の動的計画法アルゴリズム

  16. 16

    すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

  17. 17

    すべての極大値を見つけるために最適化されたアルゴリズム

  18. 18

    リスト内の3つの異なる要素を見つけるためのO(log n)アルゴリズムを設計する

  19. 19

    2つの大きなリストを交差させるための効率的なアルゴリズム

  20. 20

    最新の更新されたjsonを見つけるための効果的なアルゴリズム

  21. 21

    文字列112123123412345のn番目の桁を見つけるための効率的なアルゴリズム

  22. 22

    黄金比を計算するためのElispの効率的なアルゴリズム

  23. 23

    グラフ重心を見つけるための効率的なアルゴリズムとは何ですか?

  24. 24

    非常に大きな数の整数平方根を1桁ずつ見つけるための効率的なアルゴリズムは何ですか?

  25. 25

    与えられた内積と別のリストを見つけるためのアルゴリズム

  26. 26

    同じリスト内の要素を比較するための効率的なアルゴリズム

  27. 27

    ダブルスとサブセットを持つサブセットを見つけるための効率的なアルゴリズムは一緒です

  28. 28

    範囲内に余りがない数で割り切れる数の数を見つけるための効率的なアルゴリズム

  29. 29

    無向グラフで最長のサイクルの長さを見つけるための効率的なアルゴリズムはありますか?

ホットタグ

アーカイブ