目标
给你一个长度为 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 <= 10^5
- 1 <= nums1[i] <= 10^9
- nums1 中的所有整数互不相同。
思路
有一个元素互不相同的整数数组 nums1,问能否构造另一个相同长度的数组 nums2,nums2[i] = nums1[i] 或者 nums2[i] = nums1[i] - nums1[j],其中 j != i && nums1[i] - nums1[j] >= 1。使得 nums2 中的元素全为 奇数 或 偶数。
本题加了一个限制,只能减去比自身小的数。减去一个偶数不会改变奇偶性,还得考虑奇数。
如果全为奇数或偶数返回 true,枚举奇数与偶数的最小值,如果奇数最小值小于偶数最小值则返回 true。
代码
/**
* @date 2026-09-03 10:08
*/
public class UniformArray3876 {
public boolean uniformArray(int[] nums1) {
int oddMin = Integer.MAX_VALUE;
int evenMin = Integer.MAX_VALUE;
for (int num : nums1) {
if (num % 2 == 0) {
evenMin = Math.min(num, evenMin);
} else {
oddMin = Math.min(num, oddMin);
}
}
if (oddMin == Integer.MAX_VALUE || evenMin == Integer.MAX_VALUE) {
return true;
}
return oddMin < evenMin;
}
}
性能












