wap建站后只能访问首页网络营销策略实施的步骤
- Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices
- 1. 解题思路
- 2. 代码实现
- 题目链接:2862. Maximum Element-Sum of a Complete Subset of Indices
1. 解题思路
这一题的核心在于想明白一点:
- 要使得子序列当中任意两个数之积均为平方数,那么子序列当中的所有数必然都是一系列平方数的某一个公倍数。
因此,我们只需要不超过数组长度 n n n的所有平方数,然后分别将其扩展倍数即可。
而对于扩展倍数之后依然有效的平方数,我们同样可以通过二分法进行优化寻找。
2. 代码实现
给出python代码实现如下:
class Solution: def maximumSum(self, nums: List[int]) -> int:n = len(nums)completes = [i*i for i in range(1, int(sqrt(n) + 2)) if i * i <= n]res = max(max(nums), sum([nums[i-1] for i in completes]))for p in range(1, n+1):if p > n:breakif completes[-1] * p > n:i, j = 0, len(completes)-1while j-i>1:m = (i+j)//2if completes[m] * p > n:j = melse:i = melse:j = len(completes)if j == 1:breaks = sum([nums[p*i-1] for i in completes[:j]])res = max(res, s)return res
提交代码评测得到:耗时290ms,占用内存18.1MB。