找规律
不会,想到了找规律,但是没有总结出来。来自评论(. - 力扣(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 += x
f += i * x
ans = f
# 迭代计算f
for i in range(1, n):
f += s - n * nums[n-i]
ans = max(ans, f)
return ans
来自灵神的总结(. - 力扣(LeetCode))。
1.哈希表 + 数学
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
# 哈希表 + 数学
hash = {}
ans = [0]*2
for i, x in enumerate(nums):
hash[x] = hash.get(x, 0) + 1
if hash[x] == 2:
# 找重复数字
ans[0] = x
n = 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 = -1
for i in range(1, n + 1):
cnt = hash.get(i, 0)
if cnt == 0:
lose = i
elif cnt == 2:
repeat = i
return [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))。
(未完待续)
感谢你看到这里!一起加油吧!