zoukankan      html  css  js  c++  java
  • 剑指13.调整数组顺序使奇数位于偶数前面

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

    分析

    注意题中要求“相对位置不变”,即保持稳定性。

    方法1:最简单的思路是开辟额外数组,遍历一次数组,遇到奇数直接放入新开的数组中,再遍历一次数组,遇到偶数就继续放入新开的数组,最后再进行一次数组copy。

    方法2:类似于插排的思想,遇到奇数就从往前找偶数,如果找到就两两交换位置,遇到奇数就跳出循环。

    方法1

    public class Solution {
        //使用辅助数组
        public void reOrderArray(int [] array) {
            int[] newArr = new int[array.length];
            int i = 0;
            for (int num : array){
                if ((num & 1) == 1){ //奇数
                    newArr[i++] = num;
                }
            }
            for (int num :array){
                if ((num & 1) == 0){ //偶数
                    newArr[i++] = num;
                }
            }
            for (int j = 0; j < newArr.length; j++){
                array[j] = newArr[j];
            }
        }
    }

    方法2

    public class Solution {
        public void reOrderArray(int [] array) {
            for (int i = 1; i < array.length; i++){ //从第二个数开始找
                if ((array[i] & 1) == 1){ //当前这个数是奇数
                    for (int j = i - 1; j >= 0; j--){
                        if ((array[j] & 1) == 1)
                            break;
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                    }
                }
            }
        }
    }
     
  • 相关阅读:
    python线程池ThreadPoolExecutor用法
    redis学习笔记
    selenium + chrome 被检测,反反爬小记
    RabbitMQ单机快速安装使用
    NFS配置使用
    通过Rsync实现文件远程备份
    MySQL笔记-高可用方案
    Redis主从同步、哨兵模式、集群模式配置
    Redis维护笔记
    MongoDB笔记03——分片集群
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13457961.html
Copyright © 2011-2022 走看看