class Solution {
public int[] exchange(int[] nums) {
//时间复杂度为O(N),空间复杂度为O(1)
int left = 0, right = nums.length - 1;
while (left < right) {
//找到左侧第一个非奇数
while (left < right && nums[left] % 2 == 1) {
left ++;
}
//找到右侧第一个非偶数
while (left < right && nums[right] % 2 == 0) {
right --;
}
if (left < right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left ++;
right --;
}
}
return nums;
}
}
共以下 6 个回答
利用vector的删除元素,然后再在末尾新增元素的方式进行分奇偶类
双指针
快排,两个指针一个从前往后找偶数,一个从后往前找奇数。
时间复杂度O(n),空间复杂度O(1)