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

    题目:


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

    思路:

    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];
            }
        }
    };
  • 相关阅读:
    python 数据类型
    python核心语法
    python 基础知识
    format 用法
    有关python 函数参数
    模拟,队列与堆栈
    字符编码
    [LeetCode] Set Matrix Zeroes
    [LeetCode] Rotate Image
    [LeetCode] Unique Paths
  • 原文地址:https://www.cnblogs.com/ech2o/p/12401552.html
Copyright © 2011-2022 走看看