zoukankan      html  css  js  c++  java
  • Merge Sorted Array 解答

    Question

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

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

    Solution 1 Naive Way

    Time complexity O(n), space cost O(n)

     1 public class Solution {
     2     public void merge(int[] nums1, int m, int[] nums2, int n) {
     3         int[] originNums1 = Arrays.copyOf(nums1, m);
     4         int pointer1 = 0, pointer2 = 0, i = 0;
     5         while (pointer1 < m && pointer2 < n) {
     6             if (originNums1[pointer1] <= nums2[pointer2]) {
     7                 nums1[i] = originNums1[pointer1];
     8                 pointer1++;
     9             } else {
    10                 nums1[i] = nums2[pointer2];
    11                 pointer2++;
    12             }
    13             i++;
    14         }
    15         while (pointer1 < m) {
    16             nums1[i] = originNums1[pointer1];
    17             pointer1++;
    18             i++;
    19         }
    20         while (pointer2 < n) {
    21             nums1[i] = nums2[pointer2];
    22             pointer2++;
    23             i++;
    24         }
    25     }
    26 }

    Solution 2

    The key to solve this problem is moving element of A and B backwards. If B has some elements left after A is done, also need to handle that case.

    Time complexity O(n), space cost O(1)

     1 public class Solution {
     2     public void merge(int[] nums1, int m, int[] nums2, int n) {
     3         while (m > 0 && n > 0) {
     4             if (nums1[m - 1] >= nums2[n - 1]) {
     5                 nums1[m + n - 1] = nums1[m - 1];
     6                 m--;
     7             } else {
     8                 nums1[m + n - 1] = nums2[n - 1];
     9                 n--;
    10             }
    11         }
    12         while (n > 0) {
    13             nums1[m + n - 1] = nums2[n - 1];
    14             n--;
    15         }
    16     }
    17 }
  • 相关阅读:
    【Ubuntu 笔记】翻译 32.1 Job Control
    【Class 学习笔记】 浮点数的储存,运算
    【Ubuntu学习笔记】 安装篇-锐捷、scim、root改密码
    【Ubuntu学习笔记】安装篇-网络配置遇到的问题
    MySQL增删改查
    Spring MVC详解
    SSH和SSM对比总结
    hibernate工作原理
    JavaBean与xml互转的方法详解
    spring MVC如何获取session传值到前台
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4799827.html
Copyright © 2011-2022 走看看