码迷,mamicode.com
首页 > 编程语言 > 详细

[LeetCode] 面试题 10.01.合并排序的数组

时间:2020-03-03 13:08:33      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:题目   数组   长度   code   合并   --   出现   修改   试题   

题目:

技术图片


 这道题有多种实现的思路,这里使用双指针结合数组有序的特点进行解决

思路:

m代表A初始时有效元素的个数,n代表B中元素的个数,那么n+m才是A的总长度

从A的最后一个位置开始,设为cur,分别从A和B有效元素中选取最大的一个,进行比较,将较大的放入cur,随之相应的cur--,较大元素所在数组的有效个数减1

注:在进行比较时,会出现A == B的情况,此时将等号归到A<B处,B中元素优先会使得逻辑更加简单

在最后会出现两种情况:

  • B全部加入,A有剩余

  这种情况下,不需再做修改,A总体已有序

  • A全部加入,B有剩余

  这种情况下,说明B剩下的全是小于A中现有元素,直接依次加入A中便可

代码:

class Solution {
public:
    void merge(vector<int>& A, int m, vector<int>& B, int n) {
        int cur = m+n-1;
        while(m>0 && n>0){
            if(A[m-1]>B[n-1])  A[cur--] = A[m-- -1];
            else   A[cur--] = B[n-- -1];
        }
        while(n>0){
            A[cur--] = B[n-- -1];
        }
    }
};

 

[LeetCode] 面试题 10.01.合并排序的数组

标签:题目   数组   长度   code   合并   --   出现   修改   试题   

原文地址:https://www.cnblogs.com/ech2o/p/12401552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!