3779. 得到互不相同元素的最少操作次数
题目类型
#模拟 #哈希表
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def minOperations(self, nums: List[int]) -> int:
ans = 0
st = set()
for i in range((len(nums) + 2) // 3, -1, -1):
for x in nums[3 * i : 3 * i + 3]:
if x in st:
return i + 1
st.add(x)
return 03780. 能被 3 整除的三元组最大和
题目类型
#贪心 #排序
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def maximumSum(self, nums: List[int]) -> int:
mod3 = [[] for _ in range(3)]
ans = 0
for x in nums:
mod3[x % 3].append(x)
for row in mod3:
row.sort(reverse=True)
st = []
for i in range(4):
for j in range(4):
for k in range(4):
if i + j + k == 3 and (j + 2 * k) % 3 == 0:
st.append([i, j, k])
ans = 0
for p in st:
tmp = 0
flag = True
for i, v in enumerate(p):
if len(mod3[i]) < v:
flag = False
break
tmp += sum(mod3[i][:v])
if flag:
ans = max(tmp, ans)
return ans3781. 二进制交换后的最大分数
题目类型
#贪心 #堆
解题思路
从右往左,用堆维护最值,遇到 "0" 时更新堆顶元素至答案
示例代码
python
class Solution:
def maximumScore(self, nums: List[int], s: str) -> int:
h = []
ans = 0
for i in range(len(nums) - 1, -1, -1):
heappush(h, nums[i])
ans += nums[i]
if s[i] == "0":
ans -= heappop(h)
return ans3782. 交替删除操作后最后剩下的整数
题目类型
#数学 #模拟
解题思路
参考:这道题很简单!
示例代码
python
class Solution:
def lastInteger(self, n: int) -> int:
st = 1
base = 1
flag = True
while n > 1:
if n % 2 == 0:
if not flag:
st += base
n = (n + 1) // 2
flag = not flag
base *= 2
return st