88 Merge Sorted Array

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are mand n respectively.

题目大概的意思就是给出两个已经排序好的数组,合并这两个数组并要求仍然有序。

 1 class Solution {
 2 public:
 3     void merge(int A[], int m, int B[], int n) {
 4         int i,j,k;
 5         for(k=m+n-1,i=m-1,j=n-1;k>=0;k--){
 6             if((A[i]>B[j]||j<0)&&(i>=0)){
 7                 A[k]=A[i--];
 8             }else{
 9                 A[k]=B[j--];
10             }
11         }
12     }
13 };

代码比较简单,简单的说一下思路,

新数组的长度是m+n,从新数组的最后一个元素开始循环插入数组

if((A[i]>B[j]||j<0)&&(i>=0)) 这句代码可以这样理解,对应着两种情况:

情况一 如果数组A当前下标的元素大于数组B当前下标的元素并且数组A没有循环结束 

情况二 如果数组B的元素已经循环完而数组A的元素还没有循环完

这两种情况下就将元素保存到新的数组A中。

88 Merge Sorted Array_第1张图片

你可能感兴趣的:(array)