每次同时递增数组两个元素 能否将所有元素变为最大值
正确解法
核心判断条件
满足以下两个条件即可输出YES,否则输出NO:
- 所有元素和最大值的差值总和为偶数:每次操作会让数组总数值加2,总增量必须是2的倍数
- 单个元素的最大差值 ≤ 剩余所有元素的差值总和:每次给差值最大的元素补1时,必须同时给另一个元素补1,因此给最大差值元素补数需要消耗的其他元素补数配额,不能超过其他元素的总补数需求
示例验证
用你给出的输入[2, 1, 2, 3]验证:
- 最大值为3,各元素差值为1、2、1、0,总差值为4,满足偶数要求
- 最大差值为2,剩余差值总和为1+1+0=2,2≤2,满足要求,因此输出YES
反例验证
比如输入[1, 3]:
- 最大值为3,差值为2、0,总差值为2满足偶数要求
- 最大差值为2,剩余差值总和为0,2>0,不满足要求,输出NO
参考代码(Python)
def check_array(arr): max_val = max(arr) diffs = [max_val - num for num in arr] total_diff = sum(diffs) max_diff = max(diffs) if total_diff % 2 == 0 and max_diff <= (total_diff - max_diff): return "YES" else: return "NO"
同类问题通用思路
这类操作类可行性判断问题,核心都是抓两个不变量:
- 操作带来的总量变化特征:比如本题每次总增量为2,因此总差值必须为偶数
- 极端值的约束:比如本题最大差值的元素需要匹配足够的其他元素的补数需求,避免极端值无法匹配
内容的提问来源于stack exchange,提问作者mustafa1993
相关产品推荐
相关产品推荐

