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;};