剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

171 阅读2分钟

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

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

1、题目📑

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

实例1

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

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

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

限制

  • 0 <= nums.length <= 50000
  • 0 <= nums[i] <= 10000

2、思路🧠

方法一:双指针

  1. 从尾部和头部定义指针,进行交换
  2. 头指针一定要小于尾指针不然就直接结束循环
  3. 头指针的为偶数,尾指针为奇数才进行交换
  4. 否则一直往后移动,直到出现条件3满足。

废话少说~~~~~上代码!

3、代码👨‍💻

第一次commit AC

class Solution {
    public int[] exchange(int[] nums) {
        int pre = 0;
        int tail = nums.length - 1;
        while (pre < tail) {
            if(nums[pre] % 2 == 0) {
                if(nums[tail] % 2 != 0){
                    swap(nums, pre , tail);
                    pre++;
                    tail--;
                }else {
                    tail--;
                }
                
            }else {
                pre++;
            }
        }
        return nums;
    }

    public static void swap (int arr[], int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

时间复杂度:O(N) N为数组 nums 的长度,双指针 i , j 共同遍历整个数组

空间复杂度:O(1) 双指针 i , j 使用常数大小的额外空间。

image-20220327221001728

4、总结

该题目是将数组的位置进行交换,要始终保证,指针 i 左边都是奇数,指针 j 右边都是偶数 。

❤️‍来自专栏《LeetCode基础算法题》欢迎订阅❤️‍

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

原题链接:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面