金三银四复工高频面试题java算法LeetCode396旋转函数

 更新时间:2023年02月03日 11:05:51   作者:宫水三叶的刷题日记  
这篇文章主要为大家介绍了金三银四复工高频面试题之java算法题解LeetCode396旋转函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目描述

这是 LeetCode 上的 396. 旋转函数 ,难度为 中等。

Tag : 「前缀和」、「滑动窗口」

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

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

提示:

前缀和 + 滑动窗口

为了方便,我们将 numsnumsnums 的长度记为 nnn。

实现上,我们并不需要真正对 nums 进行复制拼接,而只需要在计算前缀和数组 sum 进行简单的下标处理即可。

代码:

class Solution {
    public int maxRotateFunction(int[] nums) {
        int n = nums.length;
        int[] sum = new int[n * 2 + 10];
        for (int i = 1; i <= 2 * n; i++) sum[i] = sum[i - 1] + nums[(i - 1) % n];
        int ans = 0;
        for (int i = 1; i <= n; i++) ans += nums[i - 1] * (i - 1);
        for (int i = n + 1, cur = ans; i < 2 * n; i++) {
            cur += nums[(i - 1) % n] * (n - 1);
            cur -= sum[i - 1] - sum[i - n];
            if (cur > ans) ans = cur;
        }
        return ans;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

最后

这是我们「刷穿 LeetCode」系列文章的第 No.396 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

以上就是金三银四复工高频面试题java算法LeetCode396旋转函数的详细内容,更多关于java算法LeetCode旋转函数的资料请关注脚本之家其它相关文章!

相关文章

  • springboot全局异常处理方式@ControllerAdvice和@ExceptionHandler

    springboot全局异常处理方式@ControllerAdvice和@ExceptionHandler

    文章总结了个人在处理全局异常处理时的经验,包括使用`StatusEnum`来定义状态码,旨在为读者提供参考,并鼓励大家支持脚本之家
    2024-11-11
  • springboot优雅获取前端参数的方法详解

    springboot优雅获取前端参数的方法详解

    现在的项目基本上都是前后端分离的项目,如何打通前后端,接收前端传过来的参数呢,这篇文章小编就来和大家详细介绍一下springboot如何优雅的获取前端参数吧
    2024-03-03
  • 一篇文章带你了解Java基础-多态

    一篇文章带你了解Java基础-多态

    这篇文章主要介绍了Java 多态的深入理解的相关资料,子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为,需要的朋友可以参考下
    2021-08-08
  • Java中wait()和notify()的正确使用方式

    Java中wait()和notify()的正确使用方式

    本文详细介绍了Java中wait()和notify()方法的作用,包括让线程阻塞并释放锁、唤醒等待线程等,通过实例演示了它们在多线程同步中的应用,,需要的朋友可以参考下
    2026-03-03
  • Struts2 使用OGNL遍历map方法详解

    Struts2 使用OGNL遍历map方法详解

    这篇文章主要介绍了Struts2 使用OGNL遍历map方法详解,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • Java微信退款开发

    Java微信退款开发

    这篇文章主要为大家详细介绍了Java微信退款开发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Java集合ArrayDeque类实例分析

    Java集合ArrayDeque类实例分析

    这篇文章主要介绍了Java集合ArrayDeque类实例分析的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java基础学习之运算符相关知识总结

    Java基础学习之运算符相关知识总结

    今天带大家复习Java基础知识,文中对Java运算符相关知识作了详细总结,对正在学习java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • java实现潜艇大战游戏源码

    java实现潜艇大战游戏源码

    潜艇大战游戏相信大家都玩过,是一款非常有趣的小游戏,那么基于代码是如何实现的呢?今天小编给大家带来一篇教程帮助大家学习java实现潜艇大战游戏,感谢的朋友一起看看吧
    2021-06-06
  • 详解Spring bean的注解注入之@Autowired的原理及使用

    详解Spring bean的注解注入之@Autowired的原理及使用

    之前讲过bean注入是什么,也使用了xml的配置文件进行bean注入,这也是Spring的最原始的注入方式(xml注入).本文主要讲解的注解有以下几个:@Autowired、 @Service、@Repository、@Controller 、@Component、@Bean、@Configuration、@Resource ,需要的朋友可以参考下
    2021-06-06

最新评论