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

Pythonで1からNまでのすべての欠落している数字を見つけるプログラム


サイズnのnumsと呼ばれる数値のリストがあり、リスト内のすべての数値が区間[1、n]に存在するとします。一部の要素は、2回表示され、他の要素は1回だけ表示される場合があります。リストにないように、[1、n]からすべての番号を見つける必要があります。昇順でソートされた番号を返す必要があります。線形の時間と一定のスペースを必要とする解決策を見つけようとする必要があります。

したがって、入力が[4、4、2、2、6、6]の場合、出力は[1、3、5]になります。

これを解決するには、次の手順に従います-

  • arr:=サイズnums + 1の配列で、0で埋めます
  • numsの各iについて、
    • arr [i]:=arr [i] + 1
  • 欠落:=新しいリスト
  • 0からarrのサイズまでの範囲のiについては、
    • arr [i]が0と同じで、iが0と同じでない場合、
      • 行方不明の最後にiを挿入
  • 行方不明を返す

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, nums):
      arr = [0]*(len(nums)+1)
      for i in nums:
         arr[i] += 1
      missing = []
      for i in range(len(arr)):
         if arr[i] == 0 and i != 0:
            missing.append(i)
      return missing
ob = Solution()
print(ob.solve([4, 4, 2, 2, 6, 6]))

入力

[4, 4, 2, 2, 6, 6]

出力

[1, 3, 5]

  1. Pythonで合計kになるリスト内の任意の2つの数値を検索するプログラム

    numsと呼ばれる数のリストがあり、別の数kがあるとすると、リストに存在する2つの数の合計がkになるかどうかを確認する必要があります。同じ要素を2回使用しないでください。また、数値は負または0にすることができます。 したがって、入力がnums =[45、18、9、13、12]、k =31のような場合、出力はTrueになります(18 + 13 =31 )。 これを解決するには、次の手順に従います- temp_set:=新しいセット numsの各numに対して、実行します numがtemp_setにある場合、 Trueを返す temp_setに(k-num)を追加します Fa

  2. Pythonで1からNまでの要素を含む配列で4つの欠落している数値を検索します

    各数値が[1、N]の範囲にあり、配列サイズが(N-4)であり、単一の要素が繰り返されていない、個別の数値の配列があるとします。したがって、1からNまでの4つの数値が配列に欠落していることがわかります。これらの4つの欠落している番号を並べ替えて見つける必要があります。 したがって、入力がA =[2、8、4、13、6、11、9、5、10]の場合、出力は[1、3、7、12]になります。 これを解決するには、次の手順に従います- temp_arr:=すべて0のサイズ4の配列 0からAのサイズの範囲のiの場合、実行 temp:=| A [i] | temp <=Aのサイズの