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

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面相关的知识,希望对你有一定的参考价值。

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

示例:

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

提示:

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

题解一:

	/**
     * 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
     *
     * @param nums 数组
     * @return 调整后的数组
     */
    public int[] exchange(int[] nums) 
        /*
         * 首尾指针法:首指针由前向后寻找偶数,尾指针由后向前寻找奇数,
         * 两指针都找到则交换其值,直至两指针相遇
         */
        int head = 0;
        int tail = nums.length - 1;
        while (head < tail) 
            while (head < tail && nums[head] % 2 != 0) 
                head++;
            
            while (head < tail && nums[tail] % 2 == 0) 
                tail--;
            
            int tmp = nums[head];
            nums[head] = nums[tail];
            nums[tail] = tmp;
        
        return nums;
    

题解二:

        /**
     * 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
     *
     * @param nums 数组
     * @return 调整后的数组
     */
    public int[] exchange(int[] nums) 
        /*
         * 首尾指针法:首指针由前向后寻找偶数,尾指针由后向前寻找奇数,
         * 两指针都找到则交换其值,直至两指针相遇
         */
        int head = 0;
        int tail = nums.length - 1;
        while (head < tail) 
            // 优化:利用位运算中的与运算 & 1,也能达到判断奇偶性的效果
            // & 运算:相同为 1, 不同为 0
            while (head < tail && (nums[head] & 1) == 1) 
                head++;
            
            while (head < tail && (nums[tail] & 1) == 0) 
                tail--;
            
            int tmp = nums[head];
            nums[head] = nums[tail];
            nums[tail] = tmp;
        
        return nums;
    

以上是关于[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面的主要内容,如果未能解决你的问题,请参考以下文章

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

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

#yyds干货盘点#剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

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

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

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 的详细题解