Python:Code Taka第2週2
Q.数値配列numsをパラメータとして渡す。数字のうち半数を超える(多数、半を超える)数字を返してください。
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
nums 배열의 길이는 무조건 2개 이상
理解問題:パラメータ配列の長さの半分を超える繰り返しの数値を返します。△問題には書いていないが、半数を超える数字は一つしかないと仮定する。
私の答え
def more_than_half(nums):
c = int(len(nums) / 2) + 1
for i in nums:
if nums.count(i) >= c:
return i
また,半数を超える数が複数あると仮定すると,上記の回答を繰り返すことはできない.
次の答えは、1つの数字が道路の過半数を超えたと仮定した答えです.
修正した答え
def more_than_half(nums):
majority = int(len(nums) / 2) + 1
num = None
for i in nums:
if num == i:
continue
if nums.count(i) >= majority:
return i
else:
num = i
return num
numという変数を宣言し、チェックした数字を保存すると、同じ演算が繰り返されません.[1,1,1,1,2,2,2]のような数字の配列があれば,1を一度チェックし,1と1をチェックしないでスキップすることができ,繰り返し文の回数を減らすことができる.ソリューション(Hashmapを使用)
import collections
def more_than_half(nums):
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)
ソリューション(ソートを使用)
def more_than_half(nums):
nums.sort()
return nums[len(nums)//2]
sortを使う答えはアイデアです.Reference
この問題について(Python:Code Taka第2週2), 我々は、より多くの情報をここで見つけました https://velog.io/@pm1100tm/Python-CodeTaka-8일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol