美文网首页
整型数组奇偶元素交互位置问题

整型数组奇偶元素交互位置问题

作者: young_dreamer | 来源:发表于2016-06-23 20:54 被阅读67次

题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。(类似的题目:一个字符串将大写字符放在末尾,且相对位置不变)

import java.util.LinkedList;
import java.util.Queue;

  public class OddFirstEvenLastOrderConst {
//  第一想到的思路是交互头尾的元素,当头是偶数,尾是奇数时交互值,并且头尾不断靠近,这一做法不能保证奇数之间的原始相对位置,代码如下注释:
    /*public void reOrderArray(int [] array) {
        if(array==null || array.length == 1)
            return;
        int head = 0;
        int end = array.length-1;
        
        while(head < end){
            while(head < end && !isEven(array[head])){
                head++;
            }
            while(head < end && isEven(array[end])){
                end--;
            }
            if(head < end){
                int temp = array[head];
                array[head] = array[end];
                array[end] = temp;
            }
        }
    }

    public boolean isEven(int i){
        return (i&1) == 0;
    }*/
//采用一次遍历,采用额外空间的方法,分别存奇数偶数然后重新赋给原数组,很低效
    public void reOrderArray(int [] array) {
        int len = array.length;
        Queue<Integer> queue1 = new LinkedList<>();
        Queue<Integer> queue2 = new LinkedList<>();
        for (int i = 0; i < len; i++) {
            if (!isEven(array[i])) {
                queue1.add(array[i]);
            }
            else if (isEven(array[i])) {
                queue2.add(array[i]);
            }
        }
        int size = queue1.size();
        for (int i = 0; i < size; i++) {
            array[i] = queue1.poll();
        }
        for (int i = size; i < len; i++) {
            array[i] = queue2.poll();
        }
    }
    public boolean isEven(int i){
        return (i&1) == 0;
    }
    
//  还可以不用多余空间,使用指针标记,一个指针A指向第一个偶数,另一个指针B指向第一个偶数后的第一个奇数
//  然后AB交互值,A指向下一个偶数,B继续向后扫描遇到的奇数,时间O(n^2),测试也能通过 OJ
    /*
     * public void reOrderArray(int [] array) {
        int index = 0;
        for(int i = 0;i<array.length;i++){
            if(array[i]%2!=0){
                for(int j = i;j>index;j--){
                    int temp = array[j-1];
                    array[j-1] = array[j];
                    array[j] = temp;
                }
                index++;
            }
        }
    }*/
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        OddFirstEvenLastOrderConst test = new OddFirstEvenLastOrderConst();
        test.reOrderArray(arr);
        
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

相关文章

  • 整型数组奇偶元素交互位置问题

    题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位...

  • golang实现堆排序

    算法题:给定一个整型数组,将数组的中的元素按升序排序。 基本思路:操作:排序输入:无序整型数组输出:有序整型数组 ...

  • 最大子数组之和

    问题: 输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组。 描述: 输入的数组为1...

  • C语言笔记12

    整型数组每个元素占4个字节

  • 最小向量积

    调整数组元素的位置使得两数组向量积最小 问题描述: 有长度为n的数组a,b,问如何调整数组内元素的位置使得 最小...

  • js数组操作

    数组-字符串数组、对象数组 删除数组指定位置元素 调换数组两个元素位置 调换1 3 位置的元素are.splic...

  • Swift 基础语法学习(四)

    数组的简单使用 实例化数组 数组元素的增加 移除数组中的元素 替换数组中指定位置的元素 查询数组中指定位置的元素

  • [LintCode]主元素

    原文发表在我的博客:主元素求关注、求交流、求意见、求建议。 问题 LintCode:主元素 描述 给定一个整型数组...

  • 指针(2017 2 28)

    有一个整型数组,含有10个元素,在整个数组中查找某一个值,找到了就给出这个值在数组中的位置,没有找到就输出"没有找...

  • 算法题总结之找到数组中出现次数唯一不同的数字

    题型 我们的问题是:“给出一个整型数组,每个元素都出现 k (k>1)次,只有一个元素出现 p 次(p >= 1,...

网友评论

      本文标题:整型数组奇偶元素交互位置问题

      本文链接:https://www.haomeiwen.com/subject/jnhodttx.html