zoukankan      html  css  js  c++  java
  • 剑指offer(10)

    题目:

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

    思路:

      如果忽略题目中“并保证奇数和奇数,偶数和偶数之间的相对位置不变,有以下解法,设两个指针,前面一个指针停在偶数位置,后面一个指针停在奇数位置,然后交换,直达第一个指针跑到第二个指针之后结束,

     

    public class Solution {
        public void reOrderArray(int [] array) {
            int point1 = 0;
            int point2 = array.length-1;
            
            while(point1<point2){
                //这里要注意一下运算符的优先级
                while(point1<point2 && (array[point1]&0x1)!=0){
                    point1++;
                }
                while(point1<point2&&(array[point2]&0x1)==0){
                    point2--;
                }
                if(point1<point2){
                    int temp = array[point1];
                    array[point1] = array[point2];
                    array[point2] = temp;
                }
            }
        }
    }    

    这里为了增强代码的重用性,可以将判断标准另起一个函数.

    回到原题,我们这里可以设置两个栈,分别从头到尾读数,把奇偶数分开到两个栈里,然后按要求从数组后面开始弹栈。

    import java.util.Stack;
    public class Solution {
        public void reOrderArray(int [] array) {
            
            Stack stack1 = new Stack();
            Stack stack2 = new Stack();
            
            int oddLength = 0;
            int evenLength = 0;
            
            for(int i=0;i<array.length;i++){
                if((array[i]&0x1)==1){
                    stack1.push(array[i]);
                    oddLength++;
                }else{
                    stack2.push(array[i]);
                    evenLength++;
                }
            }
            
            for(int i=array.length-1;i>=array.length-evenLength;i--){
                array[i] = (int)stack2.pop();
            }
            for(int i=oddLength-1;i>=0;i--){
                array[i] = (int)stack1.pop();
            }
        }
    }
    

      

  • 相关阅读:
    ThinkPHP5+Bootstrap的极速后台开发框架。
    window 下要运行php,需要编辑php环境变量
    Mui 底部导航切换
    chrome 监听touch类事件报错:无法被动侦听事件preventDefault
    HBuilder开发MUI web app溢出页面上下无法滚动问题
    D建立app项目(mui)
    宝塔linux面板,phpmyadmin进不去的处理方法
    mysql密码重置
    mysql5.6安装以及密码重置
    linux安装软件命令
  • 原文地址:https://www.cnblogs.com/figsprite/p/10466354.html
Copyright © 2011-2022 走看看