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;
                        }
                    }
                }
            }
            
        }
    }
  • 相关阅读:
    如何快速实现一个command
    引用mvvmlight dll ,操作command
    ANSI X9.8标准 PIN xor PAN获取PIN BlOCK
    关于Application.DoEvents()==转
    进程间通信方式【转】
    30岁后程序员的出路[转]
    git实用操作21条
    where T:new() 是什么意思
    使用Chrome console提取页面数据
    Maven入门2-pom.xml文件与settings.xml文件
  • 原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5364650.html
Copyright © 2011-2022 走看看