zoukankan      html  css  js  c++  java
  • 每日一题力扣396

    给定一个长度为 n 的整数数组 A 。

    假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的“旋转函数” F 为:

    F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]。

    计算F(0), F(1), ..., F(n-1)中的最大值。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/rotate-function
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    方案一:

    找规律找出来的,

    class Solution:
        def maxRotateFunction(self, A: List[int]) -> int:
            l=len(A)
            if l==0:
                return 0
            else:
                return max([sum([j*A[j-i] for j in range(l)]) for i in range(l)])

    方案二:

    大佬的错位相减法

    class Solution:
        def maxRotateFunction(self, A: List[int]) -> int:
            n = len(A)
            cur = sum(A[i] * i for i in range(n))
            _sum = sum(A)
            res = cur
            for i in range(1, n):
                cur = _sum - n * A[-i] + cur
                res = max(res, cur)
            return res
    
    作者:powcai
    链接:https://leetcode-cn.com/problems/rotate-function/solution/cuo-wei-xiang-jian-by-powcai/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    观察者模式 java实现
    Decorator 模式
    Adapter 模式 java 实现
    Singleton 模式 Java,c++实现
    抽象工厂 java实现
    工厂方法模式 java实现
    简单工厂模式 Java实现
    【4】学习JS 数据结构与算法笔记
    【3】JavaScript编程全解笔记(三)
    【3】如何高效学习笔记
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14470125.html
Copyright © 2011-2022 走看看