0
点赞
收藏
分享

微信扫一扫

LeetCode题解(1802):有界数组中指定下标处的最大值(Python)


题目:​​原题链接​​(中等)

标签:数学、贪心算法、二分查找

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

28ms (99.67%)

Ans 2 (Python)

Ans 3 (Python)

解法一:

class Solution:
def maxValue(self, n: int, index: int, maxSum: int) -> int:
# 计算将所有填为1之后剩余的和
maxSum -= n

# 计算最大化坐标到左右的距离
d1 = index
d2 = n - index - 1
if d1 > d2:
d1, d2 = d2, d1

# 计算实现两侧顶满的尖峰所需要的和
peak = (0 + d2) * (d2 + 1) // 2 + ((d2 - d1) + d2) * (d1 + 1) // 2 - d2 # 两个等差数列减被共用的最大值

# 处理剩余可以组成尖峰的情况:尽可能组成尖峰,其余的平均分布
if maxSum >= peak:
# print("距离:", [d1, d2], "剩余:", maxSum, "尖峰需要:", peak)
return 1 + d2 + (maxSum - peak) // n

# print("距离:", [d1, d2], "剩余:", maxSum)

# 不足以组成尖峰的情况:二分查找最大值
left, right = 0, d2
while left < right:
mid = (left + right) // 2
need = (0 + mid) * (mid + 1) // 2 + ((mid - min(mid, d1)) + mid) * (min(mid, d1) + 1) // 2 - mid
# print(left, right, "->", mid, "=", need)
if need <= maxSum:
left = mid + 1
else:
right = mid

return 1 + (left - 1)


举报

相关推荐

数组中的最大值

0 条评论