zoukankan      html  css  js  c++  java
  • LeetCode 88 Merge Sorted Array

    Problem:

    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 nums1 and nums2 are m and n respectively.

    Summary:

    将已排序数组nums1和nums2 merge进nums1中,其中nums1和nums2的初始化元素数目分别为m和n。

    默认nums1的空间大于m+n。

    Solution:

    1. 由于nums1有m个元素,nums2有n个元素,最终数组有m + n个元素。

    我们从第m + n - 1个元素开始向前排列新数组,我所理解的原因为:

    若从前往后排列数组,需要多次整体后移nums1数组中原有元素的位置,时间复杂度过低。而从后往前排列,可以在保证保留nums1未排列数组位置的情况下降低时间复杂度。

     1 class Solution {
     2 public:
     3     void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
     4         int i = m - 1, j = n - 1;
     5         int next = m + n - 1;
     6         while (j >= 0) {
     7             nums1[next--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
     8         }
     9     }
    10 };

    2. 首先将nums2的所有元素接在nums1后面,再用冒泡排序法对整个数组进行排序。

     1 class Solution {
     2 public:
     3     void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
     4         for (int i = 0; i < n; i++) {
     5             nums1[m + i] = nums2[i];
     6         }
     7         
     8         int len = m + n;
     9         for (int i = 0; i < len - 1; i++) {
    10             for (int j = i + 1; j < len; j++) {
    11                 if (nums1[i] > nums1[j]) {
    12                     int tmp = nums1[i];
    13                     nums1[i] = nums1[j];
    14                     nums1[j] = tmp;
    15                 }
    16             }
    17         }
    18     }
    19 };
  • 相关阅读:
    HBase性能调优
    HBase原理和设计
    HBase 架构脑图
    Hadoop
    Hadoop YARN架构设计要点
    Hadoop-YARN
    Hadoop-HDFS
    TCP传输
    分布式系统常见的事务处理机制
    Zookeeper Client简介
  • 原文地址:https://www.cnblogs.com/VickyWang/p/6239163.html
Copyright © 2011-2022 走看看