922. 按奇偶排序数组 II
题目描述
给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
示例 1:
输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
示例 2:
输入:nums = [2,3]
输出:[2,3]
提示:
- 2 <= nums.length <= 2 * 104
- nums.length 是偶数
- nums 中一半是偶数
- 0 <= nums[i] <= 1000
解题方法
方法一:双指针
- 思路:循环偶数位(+2),遇到奇数时,应该循环奇数位置(+2)直到遇到偶数,将奇数与偶数交换位置
- 复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
var sortArrayByParityII = function(nums) {
let i = 1
let j = 0
// 循环偶数位
while (j < nums.length && i < nums.length) {
// 遇到奇数
if (nums[j] & 1) {
// 循环奇数位置,知道遇到第一个偶数
while(nums[i] & 1) {
i += 2
}
// 交换位置
[nums[i],nums[j]] = [nums[j],nums[i]]
}
j += 2
}
return nums
};