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

      

  • 相关阅读:
    VS2013搭建wxWidgets开发环境
    LinuxSystemProgramming-Syllabus
    Python入门2(Python与C语言语法的不同、Notepad++运行Python代码)
    Python入门1(简介、安装)
    面试题收集---grep和find的区别
    浅拷贝 和深拷贝
    使用 system.io.filesysteminfo 来查找文件。
    使用FileSystemWatcher捕获系统文件状态
    system.io.file创建
    Javascript诞生记 [转载]
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8532257.html
Copyright © 2011-2022 走看看