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