zoukankan      html  css  js  c++  java
  • LintCode-合并排序数组 II

    题目描述:

      合并两个排序的整数数组A和B变成一个新的数组。

     注意事项

      你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。

    样例

      给出 A = [1, 2, 3, empty, empty], B = [4, 5]

      合并之后 A 将变成 [1,2,3,4,5]

    class Solution {
        /**
         * @param A: sorted integer array A which has m elements, 
         *           but size of A is m+n
         * @param B: sorted integer array B which has n elements
         * @return: void
         */
        public void mergeSortedArray(int[] A, int m, int[] B, int n) {
              // write your code here
            int i=0,j=0,q=0,p=0;
            if(m==0){
                for(int o=0;o<n;o++)
                    A[m++] = B[o];
            }else{
                int minA = A[0],maxA = A[m-1];
                for(q=0;q<n;q++){                //找出B中比A中最小的数还小的
                    if(B[q] >= minA)
                        break;
                }
                for(p=0;p<n;p++){                //找出B中比A中最大的数还大的
                    if(B[p] >= maxA)
                        break;
                }
                
                if(q!=0){                        //把B中比A中最小的数还小的数放到A的最前面,A的长度增加
                    for(int o=m-1;o>=0;o--)
                        A[o+q] = A[o];
                    for(int o=0;o<q;o++)
                        A[o] = B[o];
                    m = m+q;
                }
                
                if(p != n){                        //把B中比A中最大的数还大的数放到A的最后面,A的长度增加
                    for(int o=p;o<n;o++)
                        A[m++] = B[o];
                    n = p;
                }
                
                for(i=0;i<m-1;i++){
                    for(j=q;j<n;j++){
                        if(B[j]>=A[i] && B[j]<A[i+1]){
                            int insertNum = 1;
                            for(int k=j+1;k<n;k++){
                                if(B[k]<=A[i+1])
                                    insertNum++;
                            }
                            //B中元素插入A中
                            for(int o=m-1;o>i;o--){
                                A[o+insertNum] = A[o];
                            }
                            for(int t=0;t<insertNum;t++){
                                A[i+1+t] = B[j+t];
                            }
                            i = i+insertNum;
                            q = q+insertNum;
                            m = m+insertNum;
                            break;
                        }else{
                            break;
                        }
                    }
                }
            }
            
        }
    }
  • 相关阅读:
    Nunit单元测试实践
    win2003下安装大程序的补丁
    内存内运行vs05
    vs03无法调试,需要加入debugger组的办法
    js原型类样例
    DOS下建立以日期文件夹备份的批处理
    转flex了,ria的应用看上去很适合企业级应用开发呢
    C#类中使用Session的正确方法
    C#修改connectionStrings的方法
    批量更改目录或者文件名称
  • 原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5364650.html
Copyright © 2011-2022 走看看