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

Pythonで配列の全要素の積の符号を判定するプログラム

nums という整数型の配列があるとします。この課題では、配列に含まれるすべての要素を掛け合わせた結果の符号を求める必要があります。

例えば、入力が nums = [-2,3,6,-9,2,-4] の場合、すべての要素の積は -2592 になるため、出力は「Negative(負)」となります。

解決のアプローチ

この問題は、実際にすべての要素を掛け合わせなくても解くことができます。次の手順に従います。

  • ゼロの個数を数える変数 zeroes と、負の数の個数を数える変数 negatives をそれぞれ 0 で初期化します。
  • 配列 nums の各要素 i に対して、以下の処理を行います。
    • i が 0 と等しい場合、zeroes を 1 増やします。
    • i が負の数の場合、negatives を 1 増やします。
  • ループ終了後、zeroes が 0 より大きければ「Zero」を返します。
  • そうでなく、negatives を 2 で割った余りが 0(負の数が偶数個)であれば「Positive」を返します。
  • それ以外の場合は「Negative」を返します。

この方法が成り立つのは、負の数同士を掛け合わせると正になるという数学的な性質によるものです。つまり、負の数が偶数個含まれていれば積は正になり、奇数個であれば負になります。また、要素に一つでも 0 が含まれていれば、積は必ず 0 になります。

実装例

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

def solve(nums):
   zeroes, negatives = 0, 0
   for i in nums:
      if i == 0:
         zeroes += 1
      if i < 0:
         negatives += 1
   if zeroes > 0:
      return "Zero"
   elif negatives % 2 == 0:
      return "Positive"
   else:
      return "Negative"

nums = [-2,3,6,-9,2,-4]
print(solve(nums))

入力

[-2,3,6,-9,2,-4]

出力

Negative

計算量

このアルゴリズムは配列を一度だけ走査するため、時間計算量は O(n) です。また、追加のメモリは定数領域(O(1))しか使わないため、非常に大きな配列でも高速かつ効率的に動作します。

  1. Pythonで配列内の最大の要素を見つける方法を解説

    この記事では、「配列の中から最大の要素を求める」という問題の解決方法について詳しく解説します。 問題の概要 問題文:与えられた配列に対して、その中で最も大きい要素を計算して求める必要があります。 ここではブルートフォース(総当たり)アプローチを使用します。これは、配列全体を先頭から順番に走査しながら各要素を比較し、その時点での最大値を更新していくというシンプルかつ確実な手法です。 実装例 以下に具体的なコードを示します。 # 最大値を求める関数 def largest(arr, n): # 最大要素の初期値として最初の要素を設定 max = arr[0] # 配列全体を

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に