第7章10アレイ(アレイパーティション1)
1700 ワード
配列に2つのmin(a,b)、出力、最大数を作成します.
問題は,1,4,3,2の配列があり,2つずつ2つ抽出し,min(a 1,b 1)min(a 2,b 2)の2つの数の和を生成し,最大の数を出力する.
初めて問題を見た時、複雑な問題だと思ったが、理解してみると、簡単すぎると思った.
最後に2つの値を抽出し、2対のminを生成することは、2つの値のうちの小さな値の加算であるため、min()値はできるだけ大きくしなければならない点が重要である.
これは,降順に並べて入れると,常に最大min()値を保つことができることを意味する.
公平に1 min()値を求めず,偶数値を加算しても上記の結果が得られる.
偶数の理由は0からですから.
PythonのSleeringを利用すれば、1本の線がより簡単な問題になります.
問題は,1,4,3,2の配列があり,2つずつ2つ抽出し,min(a 1,b 1)min(a 2,b 2)の2つの数の和を生成し,最大の数を出力する.
1.昇順解除
初めて問題を見た時、複雑な問題だと思ったが、理解してみると、簡単すぎると思った.
最後に2つの値を抽出し、2対のminを生成することは、2つの値のうちの小さな値の加算であるため、min()値はできるだけ大きくしなければならない点が重要である.
これは,降順に並べて入れると,常に最大min()値を保つことができることを意味する.
from typing import List
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
sum = 0
pair = []
nums.sort()
for n in nums:
# 앞에서 부터 오름차순으로 페어를 만들어 합 계산
pair.append(n)
if len(pair) == 2:
sum += min(pair)
pair = []
return sum
2.偶数の2番目の値を計算する
公平に1 min()値を求めず,偶数値を加算しても上記の結果が得られる.
偶数の理由は0からですから.
from typing import List
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
sum = 0
nums.sort()
for i, n in enumerate(nums):
# 짝수 번째 값의 합 계산
if i % 2 == 0:
sum += n
return sum
3.ダウンジャケット
PythonのSleeringを利用すれば、1本の線がより簡単な問題になります.
from typing import List
class Solution:
def arrayPairSum(self, nums: List[int]) -> int:
return sum(sorted(nums)[::2])
レーン2マスをスキップするのは、偶数回を計算するのと同じです.Reference
この問題について(第7章10アレイ(アレイパーティション1)), 我々は、より多くの情報をここで見つけました https://velog.io/@dongmin/7장10-배열배열-파티션1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol