在 Python 中找到一个列表中第 k 大索引值的程序
假设我们有三个值 n,total 和 k。现在考虑一个大小为 n 的列表,其总和与 total 相同,且任何两个相邻元素之间的绝对差距最多为 1。我们必须找到这样一个列表中索引 k 上的最大值。
因此,如果输入为 n = 5,total = 15,k = 3,则输出将为 4,因为可能的列表之一为 [3,2,3,4,3],找到的索引为 3 的最大元素是 4。
为了解决这个问题,我们将遵循以下步骤 −
- x := 0
- 重复以下步骤,直到…
- a := k + 1
- s :=(x + x – a + 1) * floor of a/2
- a := n – k
- s := s +(x + x – a + 1) * floor of a/2
- s := s – x
- 如果 s 大于 total,则终止循环
- x := x + 1
- 返回 x – 1
示例
让我们看一下下面的实现以更好地理解 −
def solve(n, total, k):
x = 0
while 1:
a = k + 1
s = (x + x - a + 1) * a // 2
a = n - k
s += (x + x - a + 1) * a // 2
s -= x
if s > total:
break
x += 1
return x - 1
n = 5
total = 15
k = 3
print(solve(n, total, k))
输入
5, 15, 3
输出
4