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

Pythonで他の要素の少なくとも2倍の最大数を判定する方法

整数型の配列 nums が与えられます。この配列には常にちょうど1つの最大要素が存在すると仮定します。ここでの課題は、配列内の最大要素が、それ以外のすべての要素の少なくとも2倍の値を持っているかどうかを判定することです。条件を満たす場合は最大要素のインデックスを返し、満たさない場合は -1 を返します。

問題の例

例えば、入力が [3, 6, 1, 0] の場合を考えてみましょう。このとき出力は 1 となります。6が配列内の最大値であり、他のすべての要素(3、1、0)に対して6は2倍以上の大きさだからです。6のインデックスは1であるため、結果として1が返されます。

解法のアプローチ

この問題を解くために、以下の手順に従います。

  • ステップ1: 変数 maximum に配列 nums の最大値を代入します。
  • ステップ2: インデックス i を0から配列のサイズまでループさせます。
    • nums[i]maximum と等しい場合は、その位置を maxindex として記録します。
    • nums[i]maximum と等しくなく、かつ maximum < 2*(nums[i]) を満たす場合は、-1 を即座に返します。
  • ステップ3: ループが完了したら、記録しておいた maxindex を返します。

Pythonによる実装例

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

class Solution:
    def dominantIndex(self, nums):
        maximum = max(nums)
        for i in range(len(nums)):
            if nums[i] == maximum:
                maxindex = i
            if nums[i] != maximum and maximum < 2*(nums[i]):
                return -1
        return maxindex
ob = Solution()
print(ob.dominantIndex([3, 6, 1, 0]))

入力

[3, 6, 1, 0]

出力

1

計算量の分析

このアルゴリズムの時間計算量は O(n) です。まず max() 関数で最大値を求める際に配列を一度走査し、その後もう一度走査して条件を確認するため、全体として要素数に比例した線形時間で処理が完了します。また、使用する変数は定数個のみなので、空間計算量も O(1) と非常に効率的です。


  1. 【Python】ある数の最大の素因数を求めるプログラムの書き方

    この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def

  2. 【Python入門】3つの数値から最大値を求める方法

    3つの数値 a、b、c が与えられたとき、その中で最も大きい要素(最大値)を見つけるのが今回の課題です。ここでは、Pythonのリストと組み込み関数 max() を使ったシンプルな方法を、初心者向けにわかりやすく解説します。 実行例 入力:a = 2, b = 4, c = 3 出力:4 アルゴリズム ステップ1:ユーザーから3つの数値を入力として受け取る。 ステップ2:3つの数値をリストに格納する。 ステップ3:max() 関数を使ってリスト内の最大値 max(lst) を求める。 ステップ4:最後に最大値を出力する。 サンプルコード def maximum(a, b, c):