leetcode0798. 得分最高的最小轮调-hard

ops/2025/3/30 17:57:29/

1 题目:得分最高的最小轮调

官方标定难度:难

给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,这样可以使数组变为 [nums[k], nums[k + 1], … nums[nums.length - 1], nums[0], nums[1], …, nums[k-1]] 的形式。此后,任何值小于或等于其索引的项都可以记作一分。

例如,数组为 nums = [2,4,1,3,0],我们按 k = 2 进行轮调后,它将变成 [1,3,0,2,4]。这将记为 3 分,因为 1 > 0 [不计分]、3 > 1 [不计分]、0 <= 2 [计 1 分]、2 <= 3 [计 1 分],4 <= 4 [计 1 分]。
在所有可能的轮调中,返回我们所能得到的最高分数对应的轮调下标 k 。如果有多个答案,返回满足条件的最小的下标 k 。

示例 1:

输入:nums = [2,3,1,4,0]
输出:3
解释:
下面列出了每个 k 的得分:
k = 0, nums = [2,3,1,4,0], score 2
k = 1, nums = [3,1,4,0,2], score 3
k = 2, nums = [1,4,0,2,3], score 3
k = 3, nums = [4,0,2,3,1], score 4
k = 4, nums = [0,2,3,1,4], score 3
所以我们应当选择 k = 3,得分最高。

示例 2:

输入:nums = [1,3,0,2,4]
输出:0
解释:
nums 无论怎么变化总是有 3 分。
所以我们将选择最小的 k,即 0。

提示:

1 <= nums.length <= 1 0 5 10^5 105
0 <= nums[i] < nums.length

2 solution

本题直接做复杂度太大,需要转换一下思路,对于每一个 num 都有一个连续的得分位置, 比如说数字 5 的得分位置就是 [5, n - 1]。依据这一点我们可以知道每一个数轮转多少次才可以到达自己的得分范围,这也是一个连续的范围——典型的差分思想,标记好开始和结束位置,最终求前缀和即可。

代码

class Solution {
public:
int bestRotation(vector<int> &nums) {int n = nums.size();vector<int> range(n + 1);for (int i = 0; i < n; i++) {// 最终在 [nums[i] , n - 1] 可以得分// 移动 i - nums[i], i - (n - 1) 次int r = (i - nums[i] + n) % n, l = (i - (n - 1) + n) % n;// cout << l << r << endl;if (l > r) {range[l]++;range[n]--;range[0]++;range[r + 1]--;} else {range[l]++;range[r + 1]--;}}int Max_index = 0;for (int i = 1; i < n; i++) {range[i] += range[i - 1];//cout << range[i];if (range[i] > range[Max_index])Max_index = i;}return Max_index;
}
};

结果

在这里插入图片描述


http://www.ppmy.cn/ops/170173.html

相关文章

3D编辑器:开启虚拟世界的创意大门

在数字化时代&#xff0c;3D编辑器已成为设计师与创作者手中的魔法棒&#xff0c;它让虚拟世界变得触手可及&#xff0c;让创意在三维空间中自由翱翔。今天&#xff0c;我们将一同探索3D编辑器中的三大核心组件——3D场景编辑器、3D动画编辑器以及3D材质编辑器&#xff0c;看看…

“11.9元“引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 ✨

&#x1f4a5; "11.9元"引发的系统雪崩&#xff1a;Spring Boot中BigDecimal反序列化异常全链路狙击战 &#x1f3af; &#x1f50d; 用 Mermaid原生防御体系图 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…

预编译能否 100%防 sql 注入?

&#x1f31f; 什么是 SQL 注入&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是指攻击者利用特殊输入&#xff0c;让数据库执行它本来不应该执行的代码&#xff0c;从而获取或篡改数据。 就像在考试的时候偷偷改题目&#xff0c;让老师改成你想要的内容&#…

Metal 着色器与渲染管线

Metal 着色器与渲染管线&#xff1a;从 .metal 文件到 MTLRenderPipelineState 引言 在 iOS 和 macOS 开发中&#xff0c;Metal 是苹果提供的强大图形和计算 API&#xff0c;允许开发者直接访问 GPU 进行高性能的图形渲染和并行计算。本文将深入探讨 Metal 着色器文件&#x…

C++代码规范

c代码规范 总体原则类和函数设计指导原则、保证静态类型安全、保证内存安全、遵循CISO标准、优先编译时检查错误、在编译时无法实施的检查&#xff0c;在运行时检查、使用命名空间来限定作用域、优先使用C特性而不是c特性&#xff0c;并且优先使用标准库静态类型安全静态安全类…

纯css实现环形进度条+动画加载效果

写在最前面&#xff1a; 本文是小程序开发中&#xff0c;使用纯csshtml实现的进度圆环动画加载效果&#xff08;换成vue也是一样的&#xff09;。 如果你的项目可以用echarts&#xff0c;建议还是用插件&#xff0c;手搓不易&#xff0c;这很难评。 实现效果如上图&#xff1a;…

从车间到数字生态:MES如何引领制造业智能化革命‌

在全球制造业加速迈向工业4.0的浪潮中&#xff0c;传统生产模式正经历颠覆性变革。制造执行系统&#xff08;MES&#xff09;作为连接物理车间与数字世界的核心纽带&#xff0c;正从“生产辅助工具”升级为“智能决策大脑”&#xff0c;推动制造业向数据驱动、柔性化与可持续化…

gradio调用多个CSS的HTML页

很多博客介绍的gradio读取html和css比较简单&#xff0c;如果要做很细致的前端页面优化&#xff0c;比如丰富的响应式的cssjs&#xff0c;至少要有html多个css&#xff0c;是暂不能实现的。bootstrap、font-awesome、jquery等 方案一当然是直接更换htmlcss为主的部署方式&#…