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

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

    【思路】//方法1:前后两个数比较,若前为偶数后为奇数,即调换两者位置(未看懂,不如下面方法)

        //方法2(较好的方法):前后设置两个指针,当前指针指向的数为偶数,后指针指向的数为奇数时,即调换两个数位置。

     1 package com.exe3.offer;
     2 
     3 /**
     4  * 11【题目】输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
     5  *         使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
     6  * 【思路】
     7  * @author WGS
     8  *
     9  */
    10 //1 2 3 4 5
    11 public class ReOrderOddEven11 {
    12     //方法1:前后两个数比较,若前为偶数后为奇数,即调换两者位置
    13     public int[]  getOrder2(int[] arr){
    14         if(arr==null||arr.length==0){
    15             System.out.println("Invalid arrays");
    16         }
    17         int i,j;
    18         for(i=1;i<arr.length;i++){//此处i设为1,方便比较前者
    19             int temp=arr[i];
    20             if(!isEven(i)){//后者为奇数
    21                 
    22                 for(j=i-1;j>=0&&(isEven(j));j--){//此处j设为0,即与i设为1的值比较  前者(j)为偶数
    23                     arr[j+1]=arr[j];                
    24                 }
    25                 arr[j+1]=temp;
    26             }
    27             
    28         }
    29         return arr;
    30     }
    31     //判断是否为偶数
    32     public boolean isEven(int n){
    33         if((n&0x1)==0){
    34             return true;
    35         }
    36         return false;
    37     }
    38     //方法2(较好的方法):前后设置两个指针,当前指针指向的数为偶数,后指针指向的数为奇数时,即调换两个数位置。
    39     public int[]  getOrder(int[] arr){
    40         if(arr==null||arr.length==0){
    41             System.out.println("Invalid arrays");
    42         }
    43         int preIndex=0;
    44         int endIndex=arr.length-1;
    45         while(preIndex<endIndex){//要变成奇+偶组合
    46             while(preIndex<endIndex && (arr[preIndex]&0x1)!=0){//是奇数,该数不用换,指针后移
    47                 preIndex++;
    48             }
    49             while(preIndex<endIndex && (arr[endIndex]&0x1)==0){//是偶数,该数不用换,指针前移
    50                 endIndex--;
    51             }
    52             if(preIndex<endIndex){
    53                 int temp=arr[preIndex];
    54                 arr[preIndex]=arr[endIndex];
    55                 arr[endIndex]=temp;
    56             }
    57         }
    58         return arr;
    59     }
    60     public static void main(String[] args){
    61         ReOrderOddEven11 r=new ReOrderOddEven11();
    62         int[] arr=new int[]{8,1,2,3,4,5};
    63         int[] arr2=r.getOrder(arr);
    64         for(int s:arr2){
    65             System.out.print(s+" ");
    66         }
    67     }
    68 }
  • 相关阅读:
    Git远程仓库的使用(github为例)
    SQL查看数据库中每张表的数据量和总数据量
    HTML简单的注册页面搭建
    java新建日期获取工具
    ArrayList的使用方法技巧(转载)
    UI初级 TextField
    UI初级 Label
    UI入门 纯代码 第一节 UIWindow, UIView
    C 入门 第十一节
    secoclient安装mac版提示系统配置文件写入失败的解决方案
  • 原文地址:https://www.cnblogs.com/noaman/p/5407052.html
Copyright © 2011-2022 走看看