[剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]

【问题描述】[简单]

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

 

示例:

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

【解答思路】

1. 双指针

[剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]_第1张图片
[剑指offer][JAVA]面试题第[21]题[调整数组顺序使奇数位于偶数面前][双指针]_第2张图片
时间复杂度:O(N) 空间复杂度:O(1)

class Solution {
    public int[] exchange(int[] nums) {
        int i = 0, j = nums.length - 1, tmp;
        while(i < j) {
            while(i < j && (nums[i] & 1) == 1) i++;
            while(i < j && (nums[j] & 1) == 0) j--;
            tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
        return nums;
    }
}

【总结】

1.交换两个数
nums[left] ^= nums[right];
nums[right] ^= nums[left];
nums[left] ^= nums[right];
 tmp = nums[i];
 nums[i] = nums[j];
 nums[j] = tmp;
2.数组题目 需要交互 双指针思路时刻牢记
3.数组题目 边界边界判断!

转载链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/mian-shi-ti-21-diao-zheng-shu-zu-shun-xu-shi-qi-4/

你可能感兴趣的:(能力提升,java,双指针,剑指offer)