- 1、题目描述:
图片说明
- 2、题目链接:
https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665?tpId=117&&tqId=34943&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking
-3、 设计思想:
图片说明
详细操作流程看下图:
图片说明
-4、视频讲解链接B站视频讲解

-5、代码:
c++版本:

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        //因为题目明确说了A数组足够大,所以直接在A数组操作
        int i = m - 1;
        int j = n - 1;
        int index = m + n - 1;//AB合并后最后一个元素所在位置
        while(i >= 0 && j>= 0)//AB合并,谁大就先放谁
            A[index --] = A[i] > B[j] ? A[i --] : B[j --];
        while(j >= 0)//如果B没有遍历完,那么之间丢在A数组里面
            A[index--] = B[j --];
    }
};

Java版本:

public class Solution {
    public void merge(int A[], int m, int B[], int n) {
         //因为题目明确说了A数组足够大,所以直接在A数组操作
        int i = m - 1;
        int j = n - 1;
        int index = m + n - 1;//AB合并后最后一个元素所在位置
        while(i >= 0 && j >= 0)//AB合并,谁大就先放谁
            A[index --] = A[i] > B[j] ? A[i --] : B[j --];
        while(j >= 0)//如果B没有遍历完,那么之间丢在A数组里面
            A[index --] = B[j --];

    }
}

Python版本:

#
# 
# @param A int整型一维数组 
# @param B int整型一维数组 
# @return void
#
class Solution:
    def merge(self , A, m, B, n):
        # write code here
        #因为题目明确说了A数组足够大,所以直接在A数组操作
        i = m - 1
        j = n - 1
        index = m + n - 1#AB合并后最后一个元素所在位置
        while i>= 0 and j >= 0:#AB合并,谁大就先放谁
            if A[i] > B[j]:
                A[index] = A[i]
                index-=1
                i-=1
            else:
                A[index] = B[j]
                index-=1
                j-=1
        while j>= 0:
            A[index] = B[j]
            index -=1
            j -= 1