Lcof21

Lcof 21.调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

示例:

​ 输入:nums = [1,2,3,4]
​ 输出:[1,3,2,4]
​ 注:[3,1,2,4] 也是正确的答案之一。

快慢指针:

class Solution {
public int[] exchange(int[] nums) {
if (nums == null || nums.length == 0) {
return nums;
}
int i = 0, j = 0;
while (j != nums.length) {
if (nums[j] % 2 == 1) {
if (i != j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
i++;
}
j++;
}
return nums;
}
}

两端指针:

class Solution {
public int[] exchange(int[] nums) {
int left = 0, right = nums.length - 1, tmp;
while (left < right) {
// x&1位运算 等价于 x%2取余运算
while (left < right && (nums[left] & 1) != 0) {
left++;
}
while (left < right && (nums[right] & 1) != 1) {
right--;
}
tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
return nums;
}
}

复杂度分析:
时间复杂度O(N):N为数组nums长度,双指针i,j共同遍历整个数组;
空间复杂度O(1):双指针i,j使用常数大小的额外空间;

Author: Jiayi Yang
Link: https://jiayiy.github.io/2020/06/25/Lcof21/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.