zoukankan      html  css  js  c++  java
  • 面试题 10.01.合并排序的数组

    原题链接

    题解

    方式一:利用额外的空间

    开一个额外的空间存放数据,最后再放回去

    代码如下
    class Solution {
    public:
        void merge(vector<int>& A, int m, vector<int>& B, int n) {
            int i = 0, j = 0; int t[1010]; int k = 0;
            while(i < m && j < n){
                if(A[i] < B[j]){
                    t[k ++] = A[i ++];
                }
                else{
                    t[k ++] = B[j ++];
                }
            }
            while(i < m) t[k ++] = A[i ++];
            while(j < n) t[k ++] = B[j ++];
            for(int i = 0; i < n + m; ++ i){
                A[i] = t[i];
            }
        }
    };
    

    方式二:原地逆序归并

    因为题目中在A中已经开了足够的空间放在后面,可以逆序的来归并,就不需要移动了,直接在原地进行操作

    代码如下
    class Solution {
    public:
        void merge(vector<int>& A, int m, vector<int>& B, int n) {
           //使用原地逆序归并,就不需要额外的空间了
           int i = m - 1, j = n - 1, k = m + n - 1;
           while(i >= 0 && j >= 0){
               if(A[i] < B[j]) A[k --] = B[j --];
               else A[k --] = A[i --];
           }
    
           while(j >= 0) A[k --] = B[j --];//因为如果是A中的数据多了,那么他的顺序就直接是好的
        }
    };
    
  • 相关阅读:
    PHP文件系统处理(二)
    PHP中的文件系统处理(一)
    PHP中常用正则表达式大全
    PHP中的正则表达式的使用
    SLF4J日志框架
    内部类
    计算机存储单位
    Maven 要点
    Maven 父类工程创建及引用
    Eclipse Maven Web项目创建
  • 原文地址:https://www.cnblogs.com/Lngstart/p/13339602.html
Copyright © 2011-2022 走看看