当前位置: 首页 > news >正文

LT396. 旋转函数]

396. 旋转函数

问题描述

给定一个长度为 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 <= 105
  • -100 <= nums[i] <= 100

解题思路与代码实现

    class Solution {

        /**
         * 解题思路:
         * 暴力破解失败
         * 找规律,发现F(i+1)和F(i)的关系:F(i+1)=F(i)+数组和-数组长度n*nums[n-1](旋转i个位置的nums数组)
         * 可以先计算F(0)和数组和,nums[n-1]则从初始nums数组的最后一个元素开始向左移动,一共移动n-1次
         * 然后根据关系依次计算比较得到最大值
         */
        public int maxRotateFunction(int[] nums) {
            int initVal = 0;  // 计算F(0)
            int sum = 0;    // 记录数组和
            for (int i = 0; i < nums.length; i++) {
                initVal += i * nums[i];
                sum += nums[i];
            }
            int res = initVal;  // 记录最终结果
            int nextVal = initVal; // 记录F(i+1)
            int index = nums.length - 1;
            while (index > 0) {
                // F(i+1)
                nextVal = nextVal + sum - nums.length * nums[index];
                index--;
                // 比较取较大值
                res = Math.max(res, nextVal);
            }
            return res;
        }


    }

关键点

找规律,发现F(i+1)和F(i)的关系:F(i+1)=F(i)+数组和-数组长度n*numsn-1

相关文章:

  • Docker DeskTop安装与启动(Windows版本)
  • axios和Ajax
  • AI 女友突然下线,大叔集体「崩溃」;谷歌聊天机器人称谷歌滥用垄断力量丨 RTE 开发者日报 Vol.78
  • 【实战-08】flink 消费kafka自定义序列化
  • QT+SQLite数据库配置和使用
  • 基于SSM的新闻类网站
  • 我的云栖大会之旅:见证云计算创新的15年
  • 差生文具多之(一)eBPF
  • 解决SpringBoot项目端口被占用的问题
  • Mozilla Firefox 119 现已可供下载
  • STM32 IIC 实验
  • ubuntu挂载共享目录的方法
  • 2023软考-系统架构师一日游
  • Go 多版本管理
  • shopee虾皮跨境电商网站商品数据支持网站后缀(.com.my;.vn;.ph)
  • 后端接口接收对象和文件集合,formdata传递数组对象
  • 网络编程 - HTTP协议
  • 学习笔记二十七:K8S控制器Statefulset入门到企业实战应用
  • 二、数据链路层
  • Pyhotn: Mac安装selenium没有chromedriver-114以上及chromedriver无法挪到/usr/bin目录下的问题
  • 中国古代文学研究专家、南开大学教授李剑国逝世
  • 国家统计局:1-4月份,全国固定资产投资同比增长4.0%
  • 上海将建设万兆小区、园区及工厂,为模型训练数据的传输提供硬件支持
  • 林诗栋/蒯曼混双取胜,国乒赢得多哈世乒赛开门红
  • 新华时评:博物馆正以可亲可近替代“高冷范儿”
  • 俄乌谈判开始