本文主要是介绍2024.4.28力扣刷题记录-数组篇记录3(未完),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、396. 旋转函数
找规律
不会,想到了找规律,但是没有总结出来。来自评论(. - 力扣(LeetCode))。
class Solution:def maxRotateFunction(self, nums: List[int]) -> int:# 找规律s, f, n = 0, 0, len(nums)# 计算f(0)for i, x in enumerate(nums):s += xf += i * xans = f# 迭代计算ffor i in range(1, n):f += s - n * nums[n-i]ans = max(ans, f)return ans
来自灵神的总结(. - 力扣(LeetCode))。
二、645. 错误的集合
1.哈希表 + 数学
class Solution:def findErrorNums(self, nums: List[int]) -> List[int]:# 哈希表 + 数学hash = {}ans = [0]*2for i, x in enumerate(nums):hash[x] = hash.get(x, 0) + 1if hash[x] == 2:# 找重复数字ans[0] = xn = len(nums)# 找丢失数字ans[1] = (1 + n) * n // 2 - sum(nums) + ans[0]return ans
2.纯哈希表
来自评论(. - 力扣(LeetCode))。
class Solution:def findErrorNums(self, nums: List[int]) -> List[int]:# 纯哈希表n = len(nums)hash = Counter(nums)repeat = lose = -1for i in range(1, n + 1):cnt = hash.get(i, 0)if cnt == 0:lose = ielif cnt == 2:repeat = ireturn [repeat, lose]
3.纯数学
同样来自上面评论连接。没有想到用集合找出重复元素。
class Solution:def findErrorNums(self, nums: List[int]) -> List[int]:# 纯数学n, total = len(nums), sum(set(nums))# ans[1] = (1 + n) * n // 2 - sum(nums) + ans[0]# sum(set(nums)) = sum(nums) - ans[0]return [sum(nums) - total, (1 + n) * n // 2 - total]
4.位运算
来自官方题解(. - 力扣(LeetCode))。
(未完待续)
感谢你看到这里!一起加油吧!
这篇关于2024.4.28力扣刷题记录-数组篇记录3(未完)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!