记数组nums的长度为n。从先nums左侧开始遍历,如果遇到的是奇数,就表示这个元素已经调整完成,继续从左往右遍历,直到遇到一个偶数。然后从nums右侧开始遍历,如果遇到的是偶数,就表示这个元素已经调整完成了,继续从右往左遍历,直到遇到一个奇数,将换这个偶数和奇数的位置,并且重复两边的遍历,直到在中间相遇,nums调整完成。
class Solution {public int[] exchange(int[] nums) {int left = 0;int right = nums.length - 1;while (left < right) {while (left < right && (nums[left] & 1) != 0) {left++;}while (left < right && (nums[right] & 1) == 0) {right--;}if (left < right) {int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;}}return nums;}
}
复杂度分析:
- 时间复杂度:O(n),原数组中每个元素只遍历一次。
- 空间复杂度:O(n),原地调整,只消耗常数空间。