• 剑指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();
            }
        }
    }
    

      

  • 相关阅读:
    UVA11584 划分成回文串
    UVA1220Party at Hali-Bula(树的最大独立集 + 唯一性判断)
    BUAA1389愤怒的DZY(最大值最小化)
    九度1502 最大值最小化问题
    App(4.25)
    App(4.24)
    App(4.23)
    App(4.22)
    学习进度条(八)
    App(4.21)
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8532257.html
Copyright © 2020-2023  润新知