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

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

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

    遍历一遍数组,可以使用队列或者来将偶数先暂时存放起来,然后将奇数按照顺序放到数组的前边,最后遍历队列或栈,将偶数按照顺序放入

    注意:使用队列的话,先入先出,从奇数后面挨着往后放

      使用栈的话,先入后出,从数组的最后一个位置开始往前放

    而且注意在队列或者栈中要使用引用类型Integer,而不能使用基本数据类型int

    队列实现:

    import java.util.Queue;
    import java.util.LinkedList;
    public class Solution {
        public void reOrderArray(int [] array) {
            Queue<Integer> queue = new LinkedList<>();
            int flag = 0;
            for(int i = 0; i < array.length; ++i){
                if(array[i] % 2 == 0){
                    queue.offer(array[i]);
                }else{
                    array[flag++] = array[i];
                }
            }
            while(queue.peek() != null){
                array[flag++] = queue.poll();
            }
        }
    }
    

     

    使用队列时注意:

    判断是否为空(获取但不删除) queue.peek() == null  区别于queue.element()为空时抛异常

    添加元素:queue.offer()  满了时 返回false,而add()满了时,会报错

    弹出元素:queue.poll()  为空时 返回null, 而remove()满了时,会抛异常

    而且要注意:Queue是一个接口,不能直接使用它,而需要使用实现了它的类

    参考:Java 集合深入理解(9):Queue 队列

    栈实现:

    • push 入栈
    • pop 栈顶元素出栈,并返回
    • peek 获取栈顶元素,并不删除
    • empty 

    参考:Java 集合深入理解(13):Stack 栈

    import java.util.Stack;
    public class Solution {
        public void reOrderArray(int [] array) {
            Stack<Integer> stack = new Stack<>();
            int flag = 0;
            for(int i = 0; i < array.length; ++i){
                if(array[i] % 2 == 0){
                    stack.push(array[i]);
                }else{
                    array[flag++] = array[i];
                }
            }
            flag = array.length - 1;
            while(!stack.empty()){
                array[flag--] = stack.pop();
            }
        }
    }
    

      

  • 相关阅读:
    CUDA从入门到精通
    [Network] 计算机网络基础知识总结
    第三章 需求工程概论
    jsp学习
    算法——递推算法
    大话设计模式读书笔记--文章汇总
    轻松学SQL Server数据库
    Oracle数据库建表+添加数据练习
    《C#图解教程》 总览
    php发送get、post请求的6种方法简明总结
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8532257.html
Copyright © 2011-2022 走看看