原题链接
题目描述
给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任意数组 作为答案。
输入示例
思路
双指针 —— 对撞(相向)指针
- 左指针
left指向数组起始位置,右指针right指向数组右边界 - 当左指针位置在右指针左侧的时候,左指针不断右移直到找到奇数
- 当左指针位置子在右指针左侧的时候,右指针不断左移直到找到偶数
- 交换左右指针所指向的元素后,左右指针分别靠近一位
- 直到左右指针相遇
代码
class Solution {
public int[] sortArrayByParity(int[] nums) {
if (null == nums || nums.length == 1) {
return nums; // 检查输入
}
int l = 0, r = nums.length - 1;
while (l < r) {
while (l < r && nums[l] % 2 == 0) {
l++;
}
while (l < r && nums[r] % 2 != 0) {
r--;
}
if (l < r) {
swap(l, r, nums); // 交换之后更新对撞指针
}
l++;
r--;
}
return nums;
}
//交换数组位置
private void swap(int l, int r, int[] nums) {
int tmp = nums[l];
nums[l] = nums[r];
nums[r] = tmp;
}
}
结果分析
- 时间复杂度
O(N) - 空间复杂度
O(1)
面试/笔试记录
-
- 中金国际 - 笔试题 ✔ [输入方式: ACM 模式
无输入输出]
- 中金国际 - 笔试题 ✔ [输入方式: ACM 模式