【刷题记录】28.调整数组顺序使奇数位于偶数前面

250 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

题目来源:LeetCode>调整数组顺序使奇数位于偶数前面

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

 

示例:

输入:nums = [1,2,3,4]

输出:[1,3,2,4]

注:[3,1,2,4] 也是正确的答案之一。  

提示:

0 <= nums.length <= 50000

0 <= nums[i] <= 10000

二、思路分析:

思路一:

  1. 在头尾两端的指针向中间收缩的过程中进行判断交换位置即可

思路二:

  1. 遍历两边nums,第一遍遍历奇数,放在result数组中,第二遍遍历偶数,继续添加到result数组中

思路三:

  1. 首先从左边开始找到第一个偶数取名索引left,然后从这个偶数右边开始遍历索引index。
  2. 如果index遍历到奇数就和left的换位置,一起往右移。
  3. 是偶数的话,就index自己往右移。

三、AC 代码:

思路一:

    class Solution {
        public int[] exchange(int[] nums) {
            int firstPointer = 0, secondPointer = nums.length - 1;
            while (firstPointer < secondPointer) {
                while (nums[firstPointer] % 2 == 1 && firstPointer < secondPointer) {
                    firstPointer++;
                }
                while (nums[secondPointer] % 2 == 0 && firstPointer < secondPointer) {
                    secondPointer--;
                }
                int temp = nums[firstPointer];
                nums[firstPointer] = nums[secondPointer];
                nums[secondPointer] = temp;
                firstPointer++;
                secondPointer--;
            }
            return nums;
        }
    }

思路二:

    class Solution {
        public int[] exchange(int[] nums) {
            int n = nums.length, index = 0;
            int[] result = new int[n];
            for (int num : nums) {
                if (num % 2 == 1) result[index++] = num;

            }
            for (int num : nums) {
                if (num % 2 == 0) result[index++] = num;

            }
            return result;
        }
    }

思路三:


    class Solution {
        public int[] exchange(int[] nums) {
            int left = 0;
            while (left < nums.length) {
                if (nums[left] % 2 == 0) {
                    break;
                } else {
                    left++;
                }
            }

            int index = left + 1;

            while (index < nums.length) {
                if (nums[index] % 2 != 0) {
                    swap(nums, left++, index++);
                } else {
                    index++;
                }
            }
            return nums;

        }

        public void swap(int[] nums, int i, int j) {
            int tempVar = nums[i];
            nums[i] = nums[j];
            nums[j] = tempVar;
        }
    }