写点什么

【LeetCode】调整数组顺序使奇数位于偶数前面 Java 题解

作者:HQ数字卡
  • 2022 年 5 月 23 日
  • 本文字数:897 字

    阅读完需:约 3 分钟

题目描述

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



示例:
输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 500000 <= nums[i] <= 10000
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天这个算法题目是数组处理题目。数组的特点是可以利用下标来快速进行比较,交换操作。数组题目,我们使用双指针来进行快速操作。

  • 解法一是定义了新的数组,使用首位指针,遍历每一个数组元素,区分奇偶数,然后放到对应的位置。

  • 解法二是直接在原数组上进行操作,交换数组元素位置。实现代码如下,供参考。

通过代码

  • 解法一


class Solution {    public int[] exchange(int[] nums) {        int n = nums.length;        int[] ans = new int[n];        int i = 0;        int j = n - 1;        for (int num : nums) {            if (num % 2 != 0) {                ans[i++] = num;            } else {                ans[j--] = num;            }        }
return ans; }}
复制代码


  • 解法二


class Solution {    public int[] exchange(int[] nums) {        int n = nums.length;        int i = 0;        int j = n - 1;        while (i < j) {            if (nums[i] % 2 == 0) {                while (j > 0 && i < j && nums[j] % 2 == 0) {                    j--;                }                if (j > 0 && i < j &&  nums[j] % 2 != 0) {                    int temp = nums[i];                    nums[i] = nums[j];                    nums[j] = temp;                }            }            i++;        }        return nums;    }}
复制代码

总结

  • 解法一的时间复杂度是 O(n),空间复杂度是 O(n)

  • 解法二的时间复杂度是 O(n),空间复杂度是 O(1)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】调整数组顺序使奇数位于偶数前面Java题解_LeetCode_HQ数字卡_InfoQ写作社区