3467. 将数组按照奇偶性转化
题目描述
给你一个整数数组 nums
。请你按照以下顺序 依次 执行操作,转换 nums
:
- 将每个偶数替换为 0。
- 将每个奇数替换为 1。
- 按 非递减 顺序排序修改后的数组。
执行完这些操作后,返回结果数组。
示例 1:
输入:nums = [4,3,2,1]
输出:[0,0,1,1]
解释:
- 将偶数(4 和 2)替换为 0,将奇数(3 和 1)替换为 1。现在,
nums = [0, 1, 0, 1]
。 - 按非递减顺序排序
nums
,得到nums = [0, 0, 1, 1]
。
示例 2:
输入:nums = [1,5,1,4,2]
输出:[0,0,1,1,1]
解释:
- 将偶数(4 和 2)替换为 0,将奇数(1, 5 和 1)替换为 1。现在,
nums = [1, 1, 1, 0, 0]
。 - 按非递减顺序排序
nums
,得到nums = [0, 0, 1, 1, 1]
。
提示:
1 <= nums.length <= 100
1 <= nums[i] <= 1000
解法
方法一:计数
我们可以遍历数组 $\textit{nums}$,统计其中偶数的个数 $\textit{even}$。然后我们将数组的前 $\textit{even}$ 个元素置为 $0$,剩余的元素置为 $1$。
时间复杂度 $O(n)$,其中 $n$ 是数组 $\textit{nums}$ 的长度。空间复杂度 $O(1)$。
Python3
class Solution:
def transformArray(self, nums: List[int]) -> List[int]:
even = sum(x % 2 == 0 for x in nums)
for i in range(even):
nums[i] = 0
for i in range(even, len(nums)):
nums[i] = 1
return nums
Java
class Solution {
public int[] transformArray(int[] nums) {
int even = 0;
for (int x : nums) {
even += (x & 1 ^ 1);
}
for (int i = 0; i < even; ++i) {
nums[i] = 0;
}
for (int i = even; i < nums.length; ++i) {
nums[i] = 1;
}
return nums;
}
}
C++
class Solution {
public:
vector<int> transformArray(vector<int>& nums) {
int even = 0;
for (int x : nums) {
even += (x & 1 ^ 1);
}
for (int i = 0; i < even; ++i) {
nums[i] = 0;
}
for (int i = even; i < nums.size(); ++i) {
nums[i] = 1;
}
return nums;
}
};
Go
func transformArray(nums []int) []int {
even := 0
for _, x := range nums {
even += x&1 ^ 1
}
for i := 0; i < even; i++ {
nums[i] = 0
}
for i := even; i < len(nums); i++ {
nums[i] = 1
}
return nums
}
TypeScript
function transformArray(nums: number[]): number[] {
const even = nums.filter(x => x % 2 === 0).length;
for (let i = 0; i < even; ++i) {
nums[i] = 0;
}
for (let i = even; i < nums.length; ++i) {
nums[i] = 1;
}
return nums;
}