题解 | 调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面

https://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b?tpId=13&&tqId=11166&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

解法一、

直观的处理逻辑,开辟一个结果数组,第一趟遍历原数组,将原数组中的奇数依次挪到结果数组中;第二趟再遍历一遍原数组,将原数组中的偶数再依次挪到结果数组中。

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
import java.util.*;

public class Solution {
    public int[] reOrderArray (int[] a) {
        if (a == null) 
            return null;
        int[] ret = new int[a.length];
        int i = 0;
        for (int j = 0; j < a.length; j++) { // 第一趟,依次移动奇数
            if (a[j] % 2 != 0) {
                ret[i++] = a[j];
            }
        }
       for (int j = 0; j < a.length; j++) { // 第二趟,依次移动偶数
            if (a[j] % 2 == 0) {
                ret[i++] = a[j];
            }
        }
        return ret;
    }
}

解法二、插入排序思想

使用插入排序的思想,就地处理,不用开辟新的空间,但是没找到一个奇数都要向前判断这个奇数应该插入的位置,因此时间复杂度上并不经济,但是可以加深对于插入排序的理解。

特点:

  • 就地变动
  • 每个奇数一次跟前一个数进行比较,如果前面一个是偶数,就跟他交换,一直交换到队首或前面是奇数。
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
import java.util.*;


public class Solution {
    public int[] reOrderArray (int[] a) {
        if (a == null) 
            return null;
        int j, tmp;
        for (int p = 1; p < a.length; p++) { // 插入排序的思想
            tmp = a[p];
            for (j = p; j > 0 && isOdd(tmp) && isEven(a[j-1]); j--) {
                a[j] = a[j-1];
            }
            a[j] = tmp;
        }
        return a;
    }

    private boolean isOdd(int x) {
        return (x & 0B1) != 0; // 奇数
    }

    private boolean isEven(int x) {
        return (x & 0B1) == 0; // 偶数
    }
}
全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务