記事ディレクトリ
- [2169. Get 0 オペランド](https://leetcode-cn.com/problems/count-operations-to-obtain-zero/)
- [2170. 配列を交互配列にするための操作の最小数](https://leetcode-cn.com/problems/minimum-operations-to-make-the-array-alternating/)
- [2771. 魔法の豆を最小数取り出す](https://leetcode-cn.com/problems/removing-minimum-number-of-magic-beans/)
- [2172. 配列の最大合計](https://leetcode-cn.com/problems/maximum-and-sum-of-array/)
- 要約する
2169. 0 のオペランドを取得しました
シミュレーション、2 ライン ソリューション
class Solution:
def countOperations(self, num1: int, num2: int,cnt:int =1) -> int:
while num1!=0 and num2!=0 and (cnt:=cnt+1):num1,num2=min(num1,num2),max(num1,num2)-min(num1,num2)
return cnt-1
2170. 配列を代替配列にするための操作の最小数
ハッシュ、最大および 2 番目に大きいカテゴリを議論することができます、3 行のソリューション
class Solution(object):
def minimumOperations(self, nums):
c1,c2,n = Counter(nums[::2]),Counter(nums[1::2]),len(nums)
m1,m2 = c1.most_common(2),c2.most_common(2)
return 0 if n==1 else (n-m1[0][1]-m2[0][1] if m1[0][0]!=m2[0][0] else min(n - m1[0][1] - (0 if len(m2)==1 else m2[1][1]), n - m2[0][1] - (0 if len(m1)==1 else m1[1][1])))
2771. 魔法の豆をできるだけ少なくする
Cocoa の 2 行ソリューション
class Solution:
def minimumRemoval(self, beans: List[int]) -> int:
n,res,t,sorted_beans = len(beans),sum(beans),sum(beans),sorted(beans)
return min(t-(n-i)*sorted_beans[i] for i in range(n))
霊茶山のボスの一行解法
class Solution:
def minimumRemoval(self, beans: List[int]) -> int:
return sum(beans) - max((len(beans) - i) * v for i, v in enumerate(sorted(beans)))
2172. 配列の最大合計
超魔法の三線解、六弦ボスの原語:
2 部グラフの最大重みマッチングを考えて、テンプレートを見つける
import numpy as np
from scipy.optimize import linear_sum_assignment
class Solution:
def maximumANDSum(self, nums: List[int], ns: int) -> int:
nums, slots, mx = nums + [0] * (2 * ns - len(nums)), [*range(1, ns + 1)] * 2, np.zeros((ns * 2, ns * 2))
for (i, x), (j, sn) in product(enumerate(nums), enumerate(slots)): mx[i, j] = x & sn
return int(mx[linear_sum_assignment(-mx)].sum())
要約する
最初の 3 つの質問は無料です + 4 つ目の質問は罰せられます.
コードの合計量: 2+3+1+3、9 行のコードで毎週のコンテストを完了できます!