class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& nums) {
}
};
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
进阶:可以不使用额外空间解决问题吗?
原站题解
javascript 解法, 执行用时: 5 ms, 内存消耗: 55.6 MB, 提交时间: 2025-02-04 18:29:41
/** * @param {number[]} nums * @return {number[]} */ var sortArrayByParityII = function(nums) { let i = 0, j = 1; while (i < nums.length) { if (nums[i] % 2 === 0) { i += 2; // 寻找偶数下标中最左边的奇数 } else if (nums[j] % 2 === 1) { j += 2; // 寻找奇数下标中最左边的偶数 } else { [nums[i], nums[j]] = [nums[j], nums[i]]; i += 2; j += 2; } } return nums; };
rust 解法, 执行用时: 0 ms, 内存消耗: 2.4 MB, 提交时间: 2025-02-04 18:29:27
impl Solution { pub fn sort_array_by_parity_ii(mut nums: Vec<i32>) -> Vec<i32> { let mut i = 0; let mut j = 1; while i < nums.len() { if nums[i] % 2 == 0 { i += 2; // 寻找偶数下标中最左边的奇数 } else if nums[j] % 2 == 1 { j += 2; // 寻找奇数下标中最左边的偶数 } else { nums.swap(i, j); i += 2; j += 2; } } nums } }
golang 解法, 执行用时: 0 ms, 内存消耗: 8.1 MB, 提交时间: 2025-02-04 18:29:08
func sortArrayByParityII(nums []int) []int { i, j := 0, 1 for i < len(nums) { if nums[i]%2 == 0 { i += 2 // 寻找偶数下标中最左边的奇数 } else if nums[j]%2 == 1 { j += 2 // 寻找奇数下标中最左边的偶数 } else { nums[i], nums[j] = nums[j], nums[i] i += 2 j += 2 } } return nums }
java 解法, 执行用时: 2 ms, 内存消耗: 46.8 MB, 提交时间: 2025-02-04 18:28:51
class Solution { public int[] sortArrayByParityII(int[] nums) { int i = 0; int j = 1; while (i < nums.length) { if (nums[i] % 2 == 0) { // 寻找偶数下标中最左边的奇数 i += 2; } else if (nums[j] % 2 == 1) { // 寻找奇数下标中最左边的偶数 j += 2; } else { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; i += 2; j += 2; } } return nums; } }
cpp 解法, 执行用时: 3 ms, 内存消耗: 25.3 MB, 提交时间: 2025-02-04 18:28:37
class Solution { public: vector<int> sortArrayByParityII(vector<int>& nums) { int i = 0, j = 1; while (i < nums.size()) { if (nums[i] % 2 == 0) { // 寻找偶数下标中最左边的奇数 i += 2; } else if (nums[j] % 2 == 1) { // 寻找奇数下标中最左边的偶数 j += 2; } else { swap(nums[i], nums[j]); i += 2; j += 2; } } return nums; } };
python3 解法, 执行用时: 7 ms, 内存消耗: 18.5 MB, 提交时间: 2025-02-04 18:28:14
class Solution: def sortArrayByParityII(self, nums: List[int]) -> List[int]: i, j = 0, 1 while i < len(nums): if nums[i] % 2 == 0: # 寻找偶数下标中最左边的奇数 i += 2 elif nums[j] % 2 == 1: # 寻找奇数下标中最左边的偶数 j += 2 else: nums[i], nums[j] = nums[j], nums[i] i += 2 j += 2 return nums
golang 解法, 执行用时: 28 ms, 内存消耗: 6.8 MB, 提交时间: 2021-06-10 21:02:05
func sortArrayByParityII(nums []int) (ans []int) { n := len(nums) even, odd := []int{}, []int{} for _, num := range nums { if num % 2 == 0 { even = append(even, num) } else { odd = append(odd, num) } } for i := 0; i < n/2; i++ { ans = append(ans, even[i], odd[i]) } return }