逆向思维(删除元素的性质):删除数组的某个元素,左侧元素的下标不变,右侧元素的下标发生奇偶替换。
oddl
,偶数下标元素之和evenl
。oddl + evenr
,偶数下标元素之和是evenl + oddr
。oddr
、evenr
。class Solution {
public:int waysToMakeFair(vector& nums) {int oddl = 0, evenl = 0, oddr = 0, evenr = 0, n = nums.size();for (int i = 0; i < n; i ++)if (i & 1) oddl += nums[i];else evenl += nums[i];int ans = 0;for (int i = n - 1; i >= 0; i --) {if (i & 1) oddl -= nums[i];else evenl -= nums[i];if (oddl + evenr == evenl + oddr) ans ++;if (i & 1) oddr += nums[i];else evenr += nums[i];}return ans;}
};
class Solution:def waysToMakeFair(self, nums: List[int]) -> int:oddl, evenl, oddr, evenr, ans = 0, 0, 0, 0, 0for i, x in enumerate(nums):if i & 1: oddl += xelse : evenl += xfor i in range(len(nums) - 1, -1, -1):if i & 1: oddl -= nums[i]else : evenl -= nums[i]if oddl + evenr == evenl + oddr: ans += 1if i & 1: oddr += nums[i]else : evenr += nums[i]return ans
下一篇:C++——红黑树