题目:

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.

链接: http://leetcode.com/problems/merge-sorted-array/

题解:  从后向前比较。 Time Complexity - O(m + n), Space Complexity - O(1)。

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

Update:

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
if(nums1 == null || nums2 == null)
return;
int k = m - 1, l = n - 1; for(int i = m + n - 1; i >= 0; i--) {
if(k >= 0 && l >= 0)
nums1[i] = (nums1[k] > nums2[l]) ? nums1[k--] : nums2[l--];
else if (k < 0)
nums1[i] = nums2[l--];
else if (l < 0)
return;
}
}
}

二刷:

Java:

Time Complexity - O(m + n), Space Complexity - O(1)。

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
if (nums1 == null || nums2 == null) {
return;
}
while (m > 0 || n > 0) {
if (m > 0 && n > 0) {
nums1[m + n - 1] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1];
} else if (n > 0) {
nums1[n - 1] = nums2[n-- - 1];
} else {
break;
}
}
}
}

三刷:

3/18/2016:  这道题在Microsoft onsite第四轮里还真被问到了,赶紧使用二刷的方法秒了。结果最后通过recruiter询问到的feedback是 :  coding is rough。翻译过来就是, 写得太糙...... 看来真的不应该用太多的 ++, -- 和tenary operator。所以这一遍老老实实地写。

我们先确定边界条件。然后再m > 0 并且n > 0的情况下对数组nums1进行从后向前地遍历。 当nums1的最后一个元素nums1[m - 1]比nums2的最后一个元素nums2[n - 1]大的时候,nums1[m + n - 1] = nums1[m - 1],并且我们设置m--,比较下一个元素。否则nums[m + n - 1] = nums2[n - 1],n--。  循环结束后,我们判断n是否仍然大于0, 如果是的话,此时m为0, 我们继续更新nums1[n - 1] = nums2[n - 1], n--。

Java:

Time Complexity - O(m + n), Space Complexity - O(1)

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
if (nums1 == null || nums2 == null || m < 0 || n < 0) {
return;
}
while(m > 0 && n > 0) {
if (nums1[m - 1] > nums2[n - 1]) {
nums1[m + n - 1] = nums1[m - 1];
m--;
} else {
nums1[m + n - 1] = nums2[n - 1];
n--;
}
}
while (n > 0) {
nums1[n - 1] = nums2[n - 1];
n--;
}
}
}

Update:

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
if (nums1 == null || nums2 == null || nums1.length == 0) return;
while (m > 0 && n > 0) {
if (nums1[m - 1] > nums2[n - 1]) {
nums1[m + n - 1] = nums1[m - 1];
m--;
} else {
nums1[m + n - 1] = nums2[n - 1];
n--;
}
}
while (n > 0) {
nums1[n - 1] = nums2[n - 1];
n--;
}
}
}

88. Merge Sorted Array的更多相关文章

  1. Leetcode#88. Merge Sorted Array(合并两个有序数组)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  2. 88. Merge Sorted Array【easy】

    88. Merge Sorted Array[easy] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 ...

  3. LeetCode练题——88. Merge Sorted Array

    1.题目 88. Merge Sorted Array——Easy Given two sorted integer arrays nums1 and nums2, merge nums2 into  ...

  4. [LeetCode] 88. Merge Sorted Array 混合插入有序数组

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  5. 【LeetCode】88. Merge Sorted Array (2 solutions)

    Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...

  6. LeetCode 88 Merge Sorted Array

    Problem: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...

  7. 【LeetCode】88 - Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  8. LeetCode OJ 88. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  9. LeetCode 88. Merge Sorted Array(合并有序数组)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

随机推荐

  1. 11g RAC R2 体系结构---Grid

    基于agent的管理方式 从oracle 11.2开始出现了多用户的概念,oracle开始使用一组多线程的daemon来同时支持多个用户的使用.管理资源,这些daemon叫做Agent.这些Agent ...

  2. hdu 2837 Calculation 指数循环节套路题

    Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. Makefile之wildcard

    1.wildcard : 扩展通配符2.notdir : 去除路径3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd t ...

  4. Eclipse中使用javap运行配置详解

    javap是sun提供的对class文件进行反编译的工具 1.配置Run---external tools---external tools configurations 选择Program 新建ja ...

  5. python之类私有成员

    python类的成员前加双下划线"__", 则被看作"私有"成员. 实例不能简单地通过<instance>.<name>来访问. 但py ...

  6. visuall assist x 破解方法

    visuall assist x 破解方法   试用期过了后,不管怎么装,或者是找网上的KEY都不行,所以试了一下的方法,成功了: 1.先下载Visual Assist X 10.6.1845.0 2 ...

  7. cocos2dx中的动作

    CCAction是cocos2dx中专门用来处理动作相关的类,几乎所有的与动作相关的类都是从它派生而来的.而CCAction继承自CCObject class CCFiniteTimeAction : ...

  8. adb shell 出现 error :

    首先,确保 adb 服务有起来    adb kill-server adb start-server其次,确保 adb devices 可以找到设备

  9. 2014 Multi-University Training Contest 9

    官方解题报告:http://blog.sina.com.cn/s/blog_6bddecdc0102uzwm.html Boring Sum http://acm.hdu.edu.cn/showpro ...

  10. 【Android自学之旅】 Android开发环境的搭建

    [Android自学之旅] Android开发环境的搭建 搭建参考教程: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-do ...