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

    题目描述

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

    代码示例

    import java.util.Arrays;
    
    public class Offer14 {
        public static void main(String[] args) {
            int[] nums = {2,1,3,5,4};
            Offer14 testObj = new Offer14();
            testObj.reOrderArray(nums);
    //        testObj.reOrderArray2(nums);
            System.out.println(Arrays.toString(nums));
        }
        //法1:使用额外的数组
        public void reOrderArray(int[] nums) {
            //奇数个数
            int oddCnt = 0;
            for (int x : nums) {
                if (x % 2 == 1) {
                    oddCnt++;
                }
            }
            int[] clone = nums.clone();
            int i = 0;
            int j = oddCnt;
            for (int num : clone) {
                //[0, oddCnt)的索引存放奇数
                if (num % 2 == 1) {
                    nums[i++] = num;
                } else {
                    nums[j++] = num;
                }
            }
        }
    
        //法2:通过冒泡的方式上浮到最右端
        public void reOrderArray2(int[] nums) {
            int length = nums.length;
            //执行length-1次,每次将一个偶数上浮到最右边
            for (int i = length - 1; i > 0; i--) {
                for (int j = 0; j < i; j++) {
                    if (nums[j] % 2 == 0 && nums[j+1] % 2 == 1) {
                        swap(nums, j, j+1);
                    }
                }
            }
        }
    
        private void swap(int[] nums, int i, int j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
    
    
  • 相关阅读:
    sipp如何避免dead call
    6174问题
    笨小熊
    scanf 与 cin 的区别
    谁获得了最高奖学金
    _int64、long long 的区别
    小光棍数
    简单排序法
    La=LaULb (循环链表)
    删除重复的数(顺序有序表)
  • 原文地址:https://www.cnblogs.com/ITxiaolei/p/13138743.html
Copyright © 2011-2022 走看看