Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices

  • [Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices](#Leetcode 2862. Maximum Element-Sum of a Complete Subset of Indices)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题的核心在于想明白一点:

  • 要使得子序列当中任意两个数之积均为平方数,那么子序列当中的所有数必然都是一系列平方数的某一个公倍数。

因此,我们只需要不超过数组长度 n n n的所有平方数,然后分别将其扩展倍数即可。

而对于扩展倍数之后依然有效的平方数,我们同样可以通过二分法进行优化寻找。

2. 代码实现

给出python代码实现如下:

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:
                break
            if completes[-1] * p > n:
                i, j = 0, len(completes)-1
                while j-i>1:
                    m = (i+j)//2
                    if completes[m] * p > n:
                        j = m
                    else:
                        i = m
            else:
                j = len(completes)
            if j == 1:
                break
            s = sum([nums[p*i-1] for i in completes[:j]])
            res = max(res, s)
        return res

提交代码评测得到:耗时290ms,占用内存18.1MB。

相关推荐
土司大王1 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展
zander2583 小时前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
欧叶冲冲冲3 小时前
Python常见数据结构的CRUD(LeetCode高频版速查)
数据结构·python·leetcode
圣保罗的大教堂4 小时前
leetcode 3622. 判断整除性 简单
leetcode
Lyyaoo.4 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
圣保罗的大教堂6 小时前
leetcode 2996. 大于等于顺序前缀和的最小缺失整数 简单
leetcode
圣保罗的大教堂6 小时前
leetcode 3702. 按位异或非零的最长子序列 中等
leetcode
青 春 记 忆8 小时前
LeetCode 206. 反转链表|Python 解法详解
python·leetcode·链表
青 春 记 忆10 小时前
LeetCode 226. 翻转二叉树|Python 解法详解
python·算法·leetcode