前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【剑指Offer】21. 调整数组顺序使奇数位于偶数前面

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

作者头像
瑞新
发布2020-12-07 14:24:46
2980
发布2020-12-07 14:24:46
举报
文章被收录于专栏:用户3288143的专栏

题目描述

需要保证奇数和奇数,偶数和偶数之间的相对位置不变,这和书本不太一样。

解题思路

新建数组

方法一:创建一个新数组,时间复杂度 O(N),空间复杂度 O(N)。

代码语言:javascript
复制
public class Solution {
    public void reOrderArray(int [] array) {
        int countji = 0;
        for(int i : array) {
            if(!iso(i))
                countji++;
        }
        int[] copy = array.clone();
        int i = 0, j = countji;
        for(int n : copy) {
            if(n % 2 == 1)
                array[i++] = n;
            else
                array[j++] = n;
        }
    }
    private boolean iso(int n) {
        return n % 2 == 0;
    }
}

冒泡 时间换空间

方法二:使用冒泡思想,每次都当前偶数上浮到当前最右边。时间复杂度 O(N2),空间复杂度 O(1),时间换空间。

代码语言:javascript
复制
public class Solution {
    public void reOrderArray(int [] array) {
        int len = array.length;
        for(int i = len-1; i > 0; i--) {
            for(int j = 0; j < i; j++) {
                if(iso(array[j]) && !iso(array[j+1])) 
                    swap(array, j, j+1);
            }
        }
    }
    // 判断偶数
    private boolean iso(int n) {
        return n%2 == 0;
    }
    // 交换
    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解题思路
    • 新建数组
      • 冒泡 时间换空间
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档