(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java_第1张图片

记数组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),原地调整,只消耗常数空间。

(简单)剑指Offer 21. 调整数组顺序使奇数位于偶数前面 Java_第2张图片

你可能感兴趣的:(LeetCode,剑指offer,算法,数据结构)