IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Leetcode0396. 旋转函数(medium迭代) -> 正文阅读

[数据结构与算法]Leetcode0396. 旋转函数(medium迭代)

目录

1. 问题描述

2. 解题分析

?3. 代码实现


1. 问题描述

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

假设?arrk?是数组?nums?顺时针旋转?k?个位置后的数组,我们定义?nums?的?旋转函数??F?为:

  • F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]

返回?F(0), F(1), ..., F(n-1)中的最大值?

生成的测试用例让答案符合?32 位?整数。

示例 1:

输入: nums = [4,3,2,6]
输出: 26
解释:
F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26 。

示例 2:

输入: nums = [100]
输出: 0

提示:

  • n == nums.length
  • 1 <= n <= 10^5
  • -100 <= nums[i] <= 100

2. 解题分析

? ? ? ? 暴力枚举当然可以得到答案。但是,不应该满足于此。

? ? ? ? 但是,考虑到旋转的特性,我们可以得到如下递推关系:

?

More generally,?

\begin{align} F(k) &= \sum\limits_{i=0}\limits^{n}arr_k[i] + F(k-1) - n\cdot arr_k[n-1] \\&= \sum\limits_{i=0}\limits^{n}arr_k[i] + F(k-1) - n\cdot arr_k[(n-k)%n] \end{align}?

?3. 代码实现

from typing import List

class Solution:
    def maxRotateFunction(self, nums: List[int]) -> int:
        
        if len(nums)==1:
            return 0
        
        # Calculate F(0) and sum of nums
        nums_sum = 0
        F  = 0
        N  = len(nums)
        for k in range(N):
            nums_sum += nums[k]
            F  += k*nums[k]
            
        maxvalue = F
        for k in range(1,N):
            print(k,F)
            F = nums_sum + F - N * nums[(N-k)%N]
            maxvalue = F if F> maxvalue else maxvalue
        
        return maxvalue
    
if __name__ == "__main__":
    
    sln = Solution()    
    nums = [4,3,2,6]
    print(sln.maxRotateFunction(nums))

????????执行用时:264 ms, 在所有?Python3?提交中击败了89.73%的用户

????????内存消耗:22 MB, 在所有?Python3?提交中击败了61.98%的用户

? ? ? ? 回到总目录:笨牛慢耕的Leetcode每日一题总目录(动态更新。。。)?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:01:27  更:2022-04-22 19:02:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:21:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码