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: 3 Explanation: scores for each K are listed below: K = 0,A = [2,0],score 2 K = 1,A = [3,2],score 3 K = 2,A = [1,3],score 3 K = 3,A = [4,1],score 4 K = 4,A = [0,4],score 3
So we should choose K = 3,which has the highest score.
Example 2: Input: [1,4] Output: 0 Explanation: 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 most20000
. -
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
的长度最大为20000
。 -
A[i]
的取值范围是[0,A.length]
。
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..<n 11 { 12 change[i] += change[i - 1] + 1 13 res = (change[i] > change[res]) ? i : res 14 } 15 return res 16 } 17 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。