2025-08-30:将数组按照奇偶性转化。用go语言,对给定的整数数组 nums 先进行二值化处理(偶数改为 0,奇数改为 1
2025-08-30:将数组按照奇偶性转化。用go语言,对给定的整数数组 nums 先进行二值化处理(偶数改为 0,奇数改为 1),然后把得到的数组按升序排列,返回排序后的结果。
1 <= nums.length <= 100。
1 <= nums[i] <= 1000。
输入: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]。
题目来自力扣3467。
根据题目要求和提供的代码,整个过程可以分为以下几个详细步骤:
步骤描述:
-
统计偶数个数:
首先,遍历整个数组nums
,统计其中偶数的个数。初始化计数器count
为 0。对于数组中的每个元素,检查它是否为偶数(即元素对 2 取模等于 0)。如果是偶数,则将计数器count
加 1。这一步完成后,count
的值就是数组中偶数的总数。 -
将前 count 个位置置为 0:
由于最终需要将数组按升序排列(即所有的 0 在前,所有的 1 在后),并且已知偶数的个数为count
,那么排序后前count
个位置应该是 0(因为偶数对应 0)。因此,直接遍历数组的前count
个位置,将每个位置的值设置为 0。 -
将剩余位置置为 1:
剩下的位置(从索引count
开始到数组末尾)应该都是奇数对应的 1。因此,从数组的最后一个元素开始向前遍历,直到索引count
(包括),将每个位置的值设置为 1。注意:这里代码是从后往前设置,但实际上也可以从索引count
开始往后设置为 1(但代码中是从后往前,效果相同)。 -
返回处理后的数组:
经过上述操作后,数组的前count
个位置都是 0,后面的位置都是 1,整个数组已经按升序排列。直接返回该数组即可。
注意:
- 原始数组中的元素被直接修改,没有使用额外的数组来存储结果(除了几个变量)。
- 整个过程实际上没有进行真正的“排序”,而是利用偶数个数直接构造了排序后的结果(因为只有 0 和 1,且需要升序排列)。
复杂度分析:
-
时间复杂度:O(n),其中 n 是数组的长度。
第一步遍历整个数组统计偶数个数,需要 O(n) 时间。第二步遍历前count
个位置(最多 n)设置为 0,需要 O(n) 时间。第三步遍历剩余位置(最多 n)设置为 1,也需要 O(n) 时间。因此总时间复杂度是线性的,即 O(n)。 -
额外空间复杂度:O(1)。
整个过程只使用了常数个额外变量(如计数器count
和循环索引i
),没有使用与输入规模相关的额外空间(如额外数组)。因此额外空间复杂度是常数级别 O(1)。
总结:该方法高效地利用了问题特性(二值化后只有 0 和 1,且需要升序排列),通过统计偶数个数直接构造结果,避免了常规排序(如快速排序、归并排序等)所需的 O(n log n) 时间,实现了线性时间复杂度和常数空间复杂度。
Go完整代码如下:
package main
import (
"fmt"
)
func transformArray(nums []int) []int {
count := 0
for i := range nums {
if nums[i]%2 == 0 {
count++
}
}
for i := 0; i < count; i++ {
nums[i] = 0
}
for i := len(nums) - 1; i >= count; i-- {
nums[i] = 1
}
return nums
}
func main() {
nums := []int{4, 3, 2, 1}
result := transformArray(nums)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
from typing import List
def transformArray(nums: List[int]) -> List[int]:
count = 0
for num in nums:
if num % 2 == 0:
count += 1
for i in range(count):
nums[i] = 0
for i in range(count, len(nums)):
nums[i] = 1
return nums
# 测试代码
if __name__ == "__main__":
nums = [4, 3, 2, 1]
result = transformArray(nums)
print(result)
- 点赞
- 收藏
- 关注作者
评论(0)