SIT算法竞赛社的年度社长选举开始了!今年共有 n 名候选人,编号为 0 到 n-1,每位候选人的竞选能力值用数组 A 表示。
候选人zcf也想参选社长,但他发现选举规则很特殊:选举前需要选择一个旋转参数 K,将候选人名单循环右移 K 个位置。在新的序列中,每位候选人如果满足能力值 ≤ 当前位置索引,就能获得1分。
zCF希望选择一个合适的 K,使得选举的总得分最高,这样他当选社长的机会更大。请你帮他找出这个最佳的 K。
给定长度为 n 的数组 A,表示候选人的能力值。定义旋转操作为:将数组循环右移 K 位,得到新数组: A[k], A[k+1], ..., A[n-1], A[0], A[1], ..., A[k-1]
i(0 ≤ i < n):
A[i] ≤ i,得1分
请找出能获得最高总得分的旋转指数 K。如果多个 K 都能获得最高分,返回最小的那个。
第一行:整数 n (1 ≤ n ≤ 10⁵) 第二行:n 个整数 A[0], A[1], ..., A[n-1] (0 ≤ A[i] ≤ 10⁵)
输出获得最高得分的最小旋转指数 K
原始数组:[2, 4, 1, 3, 0]
K = 0:[2,4,1,3,0] → 得分3(位置2:1 ≤ 2;位置3:3 ≤ 3;位置4:0 ≤ 4)
K = 1:[4,1,3,0,2]` → 得分3(位置1:1 ≤ 1;位置3:0 ≤ 3 ;位置4:2 ≤ 4)
K = 2:`[1,3,0,2,4] → 得分3(位置2:0 ≤ 2;位置3:2 ≤ 3 ;位置4:4 ≤ 4)
K = 3:[3,0,2,4,1]` → 得分3(位置1:0 ≤ 1;位置2:2 ≤ 2 ;位置4:1 ≤ 4)
K = 4:[0,2,4,1,3] → 得分3(位置0:0 ≤ 0;位置3:1 ≤ 3 ;位置4:3 ≤ 4)
最高得分3,最小 K = 0。