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

      

  • 相关阅读:
    uva 10269(floyd+Dijkstra)
    Codeforces Round #223 (Div. 2) 解题报告
    uva 11280(Dijkstra+递推)
    uva 10246(变形floyd)
    闲来无事:跳台阶
    opencv和javacv版本不一致
    javaCV:爱之初体验
    mevan引入容联云通讯jar
    复杂度函数的表示
    MySQL与mabits大小比较、日期比较示例
  • 原文地址:https://www.cnblogs.com/figsprite/p/10466354.html
Copyright © 2011-2022 走看看