[Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score

[Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score,第1张

概述 Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1], A{K+2], ... A[A.length - 1], A[0], A[1], ..., A[K-1].  Afterward, any entries that are less than

 Given an array A,we may rotate it by a non-negative integer K so that the array becomes A[K],A[K+1],A{K+2],... A[A.length - 1],A[0],A[1],...,A[K-1].  Afterward,any entrIEs that are less than or equal to their index are worth 1 point. 

For example,if we have [2,4,1,3,0],and we rotate by K = 2,it becomes [1,2,4].  This is worth 3 points because 1 > 0 [no points],3 > 1 [no points],0 <= 2 [one point],2 <= 3 [one point],4 <= 4 [one point].

Over all possible rotations,return the rotation index K that corresponds to the highest score we Could receive.  If there are multiple answers,return the smallest such index K.

Example 1:input: [2,0]Output: 3Explanation:  scores for each K are Listed below: K = 0,A = [2,0],score 2K = 1,A = [3,2],score 3K = 2,A = [1,3],score 3K = 3,A = [4,1],score 4K = 4,A = [0,4],score 3

So we should choose K = 3,which has the highest score. 

Example 2:input: [1,4]Output: 0Explanation:  A will always have 3 points no matter how it shifts.So we will choose the smallest K,which is 0.

Note:

A will have length at most 20000. A[i] will be in the range [0,A.length].

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

例如,如果数组为 [2,0],我们按 K = 2 进行轮调后,它将变成 [1,4]。这将记作 3 分,因为 1 > 0 [no points],4 <= 4 [one point]。

在所有可能的轮调中,返回我们所能得到的最高分数对应的轮调索引 K。如果有多个答案,返回满足条件的最小的索引 K。

示例 1:输入:[2,0]输出:3解释:下面列出了每个 K 的得分:K = 0,score 3所以我们应当选择 K = 3,得分最高。 
示例 2:输入:[1,4]输出:0解释:A 无论怎么变化总是有 3 分。所以我们将选择最小的 K,即 0。

提示:

A 的长度最大为 20000A[i] 的取值范围是 [0,A.length]。 Runtime: 196 ms Memory Usage: 18.9 MB
 1 class Solution { 2     func bestRotation(_ A: [Int]) -> Int { 3         var n:Int = A.count 4         var res:Int = 0 5         var change:[Int] = [Int](repeating:0,count:n) 6         for i in 0..<n 7         { 8             change[(i - A[i] + 1 + n) % n] -= 1 9         }10         for i in 1..<n11         {12             change[i] += change[i - 1] + 113             res = (change[i] > change[res]) ? i : res14         }15         return res16     }17 }
总结

以上是内存溢出为你收集整理的[Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score全部内容,希望文章能够帮你解决[Swift]LeetCode798. 得分最高的最小轮调 | Smallest Rotation with Highest Score所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存