zoukankan      html  css  js  c++  java
  • lintcode:交错正负数

    交错正负数

    给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。

     注意事项

    不需要保持正整数或者负整数原来的顺序。

    样例

    给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案

    挑战

    原地完成,没有额外的空间

    解题

    1.快速排序

    2.定义新数组,交叉选取正负数放到新数组

    class Solution {
        /**
         * @param A: An integer array.
         * @return: void
         */
        public void rerange(int[] A) {
            // write your code here
            if(A == null ||A.length == 0)
                return;
            int low = 0;
            int high = A.length - 1;
            while(low < high){
                // 负数放前
                if( low < high && A[low] <0 )
                    low+=1;
                // 正数放后
                if( low < high && A[high] >0 )
                    high-=1;
                if(low < high){
                    int tmp = A[low];
                    A[low] = A[high];
                    A[high] = tmp;
                }
            }
            int flag = 0;
            if(A.length -low > low)// 正数大于负数
                flag =1;
            int m = 0,n = low;
            int[] B = new int[A.length];
            for(int i = 0;i < B.length;i++){
                if( flag==0){
                    if(i%2==0)
                    B[i]= A[m++];
                else
                    B[i]= A[n++];   
                }else{
                    if(i%2==0)
                    B[i]= A[n++];
                else
                    B[i]= A[m++];
                }
    
            }
    
            for(int i =0;i<A.length;i++)
                A[i] = B[i];
       }
    }
  • 相关阅读:
    第三次冲刺
    [操作系统]实验四
    第二个冲刺5.0
    第二个冲刺
    学术诚信与职业道德--个人感想
    软件工程——sprint 1回顾总结
    [读书笔记]
    sprint5.0
    [操作系统]3.0
    学习进度条
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5378407.html
Copyright © 2011-2022 走看看