3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
【LetMeFly】3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
力扣题目链接:https://leetcode.cn/problems/construct-uniform-parity-array-ii/
给你一个长度为 n 的数组 nums1,其中包含 互不相同 的整数。
你需要构造另一个长度为 n 的数组 nums2,使得 nums2 中的元素要么全部为 奇数,要么全部为 偶数。
对于每个下标 i,你必须从以下两种选择中 任选其一(顺序不限):
nums2[i] = nums1[i]nums2[i] = nums1[i] - nums1[j],其中j != i,且满足nums1[i] - nums1[j] >= 1
如果能够构造出满足条件的数组,则返回 true;否则,返回 false。
示例 1:
输入: nums1 = [1,4,7]
输出: true
解释:
- 设置
nums2[0] = nums1[0] = 1。 - 设置
nums2[1] = nums1[1] - nums1[0] = 4 - 1 = 3。 - 设置
nums2[2] = nums1[2] = 7。 nums2 = [1, 3, 7],所有元素均为奇数。因此答案为true。
示例 2:
输入: nums1 = [2,3]
输出: false
解释:
无法构造出满足所有元素奇偶性相同的 nums2。因此答案为 false。
示例 3:
输入: nums1 = [4,6]
输出: true
解释:
- 设置
nums2[0] = nums1[0] = 4。 - 设置
nums2[1] = nums1[1] = 6。 nums2 = [4, 6],所有元素均为偶数。因此答案为true。
提示:
1 <= n == nums1.length <= 1051 <= nums1[i] <= 109nums1中的所有整数互不相同。
解题方法:分类讨论
如果$nums1$中所有元素都是奇数或者都是偶数,那么直接返回$true$。
否则(有奇数和偶数):
- 不能全变成偶数,因为奇数变偶数必须减去一个更小的奇数,而最小的奇数则无法变成偶数。
- 能全变成奇数当前仅当最小奇数小于最小偶数,因为偶数变奇数要减去一个更小的奇数。
所以一次遍历统计下$nums1$中最小奇数和最小偶数,若无奇数或无偶数返回true,否则若$最小奇数\lt 最小偶数$返回true,否则返回false。
- 时间复杂度$O(len(nums1))$
- 空间复杂度$O(1)$
AC代码
C++
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
https://blog.letmefly.xyz/2026/09/03/LeetCode 3876.构造奇偶一致的数组II/