题目:

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)。

  1. public class Solution {
  2. public void merge(int A[], int m, int B[], int n) {
  3.  
  4. while(m > 0 && n > 0){
  5. if(A[m - 1] >= B[n - 1]) {
  6. A[m + n - 1] = A[m - 1];
  7. m --;
  8. } else {
  9. A[m + n - 1] = B[n - 1];
  10. n --;
  11. }
  12. }
  13.  
  14. while(n > 0){
  15. A[m + n - 1] = B[n - 1];
  16. n --;
  17. }
  18.  
  19. }
  20. }

Update:

  1. public class Solution {
  2. public void merge(int[] nums1, int m, int[] nums2, int n) {
  3. if(nums1 == null || nums2 == null)
  4. return;
  5. int k = m - 1, l = n - 1;
  6.  
  7. for(int i = m + n - 1; i >= 0; i--) {
  8. if(k >= 0 && l >= 0)
  9. nums1[i] = (nums1[k] > nums2[l]) ? nums1[k--] : nums2[l--];
  10. else if (k < 0)
  11. nums1[i] = nums2[l--];
  12. else if (l < 0)
  13. return;
  14. }
  15. }
  16. }

二刷:

Java:

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

  1. public class Solution {
  2. public void merge(int[] nums1, int m, int[] nums2, int n) {
  3. if (nums1 == null || nums2 == null) {
  4. return;
  5. }
  6. while (m > 0 || n > 0) {
  7. if (m > 0 && n > 0) {
  8. nums1[m + n - 1] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1];
  9. } else if (n > 0) {
  10. nums1[n - 1] = nums2[n-- - 1];
  11. } else {
  12. break;
  13. }
  14. }
  15. }
  16. }

三刷:

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)

  1. public class Solution {
  2. public void merge(int[] nums1, int m, int[] nums2, int n) {
  3. if (nums1 == null || nums2 == null || m < 0 || n < 0) {
  4. return;
  5. }
  6. while(m > 0 && n > 0) {
  7. if (nums1[m - 1] > nums2[n - 1]) {
  8. nums1[m + n - 1] = nums1[m - 1];
  9. m--;
  10. } else {
  11. nums1[m + n - 1] = nums2[n - 1];
  12. n--;
  13. }
  14. }
  15. while (n > 0) {
  16. nums1[n - 1] = nums2[n - 1];
  17. n--;
  18. }
  19. }
  20. }

Update:

  1. public class Solution {
  2. public void merge(int[] nums1, int m, int[] nums2, int n) {
  3. if (nums1 == null || nums2 == null || nums1.length == 0) return;
  4. while (m > 0 && n > 0) {
  5. if (nums1[m - 1] > nums2[n - 1]) {
  6. nums1[m + n - 1] = nums1[m - 1];
  7. m--;
  8. } else {
  9. nums1[m + n - 1] = nums2[n - 1];
  10. n--;
  11. }
  12. }
  13. while (n > 0) {
  14. nums1[n - 1] = nums2[n - 1];
  15. n--;
  16. }
  17. }
  18. }

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. Python计算斗牛游戏的概率

    Python计算斗牛游戏的概率 过年回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛.在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率). ...

  2. 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8.1/WinServer2012R2

    .NET Framework 3.5 作为的SQL Server 2012的先决条件,假如使用图形化方式需要使用internet,对于服务器部署时缓慢的一点(需要下载后安装) 以下提供一个使用使用安装 ...

  3. 数据的增量更新之EXISTS

    有时候需要实现是数据的增量更新,因为更新全量会带来时间跟数据库资源的浪费,还有可能是数据出现冗余,所以需要使用增量数据同步,下面是一个数据增量同步的小实例. ---drop table A CREAT ...

  4. eclipse下mysql编程

    mysql -uroot -p 密码 1:如果/usr/include/mysql路径下不存在头文件请: apt-get install libmysql++安装开发包 2:程序中添加头文件<m ...

  5. gtest功能测试一

    一.前言 这篇文章主要总结gtest中的所有断言相关的宏. gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列.一个直观的解释就是: 1. ASSERT_* 系列 ...

  6. Ubuntu中NetBeans C/C++配置、编译

    系统环境:Ubuntu 9.04软件环境:NetBeans 6.7.1 C/C++ .JDK1.6.0_16本次目的:完成NetBeans 6.7.1 C/C++ 的配置工作.编译测试及对中文支持 首 ...

  7. 类的const成员

    类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他 ...

  8. Week1 Team Homework #3: 软件工程在北航

    在组内成员的共同努力,我们采访了几个学长学姐,顺利完成任务.反馈信息如下: 平均每周花在这门课上的时间 平均写的代码总行数 学到的最有用的部分 最没用的部分 <软件工程>最应该改进的地方 ...

  9. android studio 中设置apk的版本号

    今天在mainfest.xml中设置版本号为2,(代码获取到的版本号无效) android:versionCode="2" android:versionName="2. ...

  10. IIS搭建本地服务器,花生壳实现外网通过域名访问网站

    配置服务器 作为一个青年,没有实力,做不出标图所示的服务器. 作为一个学生,买不起服务器 作为一个小孩,买不起域名 但别忘了 作为一个平民玩家,只要有耐心 装备迟早会做出来的 (注:感觉有钱与没钱还是 ...