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

【Python】1つの要素を削除して平均値をkにできるか判定する方法

問題概要

数値のリスト nums と整数 k が与えられたとき、リストからちょうど1つの要素を削除することで、残りの要素の平均値がちょうど k と一致するかどうかを判定します。この問題には、次の制約があります。

  • 2 ≤ n ≤ 1,000(n は nums の要素数)
  • nums[i] ≤ 1,000,000、k ≤ 1,000,000

たとえば、入力が [5,3,2,4,6,10]k = 4 の場合、出力は True になります。10 を削除すると、残りの要素の平均は (5+3+2+4+6)/5 = 4 となり、k と一致するためです。

解法の考え方

この問題は、数学的な性質を利用することで効率的に解けます。要素 i を削除した後の平均が k になる条件を式で表すと、次のようになります。

(s − i) / (n − 1) = k

ここで、s は全要素の合計、n は要素数です。この式を変形すると s − i = k × (n − 1) となるため、各要素についてこの条件を満たすものが存在するかを確認すればよいことになります。具体的な手順は以下の通りです。

  • s: nums の全要素の合計を求める
  • t: k × (nums のサイズ − 1) を計算する
  • nums の各要素 i について、s − it と等しければ True を返す
  • すべての要素を確認しても該当がなければ False を返す

この手法の計算量は O(n) であり、リストを一度走査するだけで答えが得られるため、非常に効率的です。

実装例

理解を深めるために、以下の Python コードを見てみましょう。

class Solution:
    def solve(self, nums, k):
        s = sum(nums)
        t = k * (len(nums) - 1)
        for i in nums:
            if s - i == t:
                return True
        return False

ob = Solution()
nums = [5, 3, 2, 4, 6, 10]
k = 4
print(ob.solve(nums, k))

入力

[5,3,2,4,6,10], 4

出力

True
  1. 【Python】配列で表された大きな数に1を加算する方法(Plus One問題)

    整数の配列 A があるとします。A は n 個の非負の整数を要素として持ち、配列全体で1つの大きな数を表しています。例えば、A = [5, 3, 2, 4] が与えられた場合、これは数値 5324 を意味します。この配列 A を受け取り、その数に 1 を加算した結果を、同じく配列形式で返す必要があります。つまり、加算後の A は [5, 3, 2, 5] となるわけです。 解決のための手順 この問題は、以下の手順で解くことができます。 配列の各要素を文字列に変換しながら連結し、1つの文字列を作成する その文字列を整数型に変換し、1 を加算する 加算結果を桁ごとに分割し、新しい配列として組み立

  2. Pythonファイルを別のPythonファイルから実行する3つの方法

    1つのPythonファイルから別のPythonファイルを実行したい場面はよくあります。実現方法は複数あり、それぞれ特徴が異なるため、用途に合わせて使い分けることが大切です。ここでは代表的な3つの方法を具体例とともに解説します。 1. モジュールとしてインポートする(最も推奨される方法) もっとも標準的で安全なのが、実行したいファイルをモジュールとして読み込み、その中の関数を呼び出す方法です。 例えば、fileB.pyをfileA.pyから利用したい場合を考えます。両方のファイルが同じディレクトリにあるなら、fileA.py内に次のように記述します。 import fileB これだけで、fil