题目:

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. VB最新使用教程

    Visual Basic是一种由 微软公司开发的结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.这是一种可用于微软自家产品开发的语言.它源自于BASIC编程语言. ...

  2. exec 和 source的区别

    source 就是让 script 在当前 shell 内执行.而不是产生一个 sub-shell 来执行.由exec 也是让 script 在同一个行程上执行,但是原有行程则被结束了. source ...

  3. python学习2——数据类型

    1. python是强类型 动态类型的语言,动态类型表明它可以在声明变量的时候,不必指定数据类型,强类型规定了它不能容忍隐式类型转换 2. python中的不可变类型有:int,string,tupl ...

  4. Azure IaaS for IT Pros Online Event 总结

    微软一个为期4天的一个有关于Azure的介绍,主要总结了些Azure现有的技术以及将会推出东西 主题链接 http://channel9.msdn.com/Events/Microsoft-Azure ...

  5. 无法创建链接服务器 "TEST" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例

    在使用SQLserver建立远程服务连接Oracle的时候出现先下面错误 出现这个错误,我找到最常见的两个原因 1.注册表 <1>按下WIN+R,打开“运行”窗口,输入“regedit”, ...

  6. java中封装

    .什么是封装? 封装就是将属性私有化,提供公有的方法访问私有属性. 做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性 ...

  7. 十一、 BOOL类型、分支结构和关系运算符

    BOOL类型:表示非真即假.只有两个值:YES和NO,而二进制只识别二进制数,所以,将YES替换为“1”,NO替换为“0” BOOL数据类型占一字节的空间内存 BOOL数据类型输出为:%lu:输入为: ...

  8. Linux内核分析作业一

    一.实验 通过反汇编一个简单的c语言程序来分析计算机是如何工作的 1.进入实验楼,在实验楼环境下把c语言代码转换成汇编码 汇编代码如下图: 二.汇编代码的工作过程中堆栈的变化:(手绘步骤,顺序是从左到 ...

  9. 在windows 7搭建xcode开发环境

    前言:本文适用于没有ios开发环境(如无iphone,mac等),在windows上搭建出ios的开发环境.值得注意的是,在windows搭建的ios开发环境只能做开发测试,无法发布产品.若需要发布产 ...

  10. 3223: Tyvj 1729 文艺平衡树 - BZOJ

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...