LeetCode:88. Merge Sorted Array(按照要求合并数组)

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文章目录:

题目描述:

java实现方法1:

pyhon实现方法1:

java实现方法2:

python实现方法2:


题目描述:

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3

输出: [1,2,2,3,5,6]

来源:力扣(LeetCode)


java实现方法1:

 /**
     * 按照要求合并两个数组
     *
     * @param nums1 数组1
     * @param m     开始位置
     * @param nums2 数组2
     * @param n     开始位置
     */
    public int[] merge(int[] nums1, int m, int[] nums2, int n) {
        if (nums1.length < 1 || nums1 == null) {
            return null;
        }
        if (nums2.length < 1 || nums2 == null) {
            return null;
        }
        int[] arr = new int[nums1.length];
        int index = 0;
        int i = 0;
        int j = 0;
        // 按照顺序插入到另外一个链表中
        while ((i < m) && (j < n)) {
            if (nums1[i] <= nums2[j]) {
                arr[index] = nums1[i];
                i++;
                index++;
            } else {
                arr[index] = nums2[j];
                j++;
                index++;
            }
        }
        // 如果没插入完整继续
        while (i < m) {
            arr[index] = nums1[i];
            i++;
            index++;
        }
        // 如果没插入完整继续
        while (j < n) {
            arr[index] = nums2[j];
            j++;
            index++;
        }
        return arr;
    }

时间复杂度:O(m+n)

空间复杂度:O(n)


pyhon实现方法1:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
'''
按照要求合并数组
author:zhangyu
date:2019/10/24
'''
def merge(nums1, m, nums2, n):
    if len(nums1) < 1 or nums1 == None:
        return;
    if len(nums2) < 1 or nums2 == None:
        return;
    arr = [0] * len(nums1)
    index = 0
    i = 0
    j = 0
    while i < m and j < n:
        if nums1[i] <= nums2[j]:
            arr[index] = nums1[i]
            index += 1
            i += 1
        else:
            arr[index] = nums2[j]
            j += 1
            index += 1
    while i < m:
        arr[index] = nums1[i]
        index += 1
        i += 1
    while j < n:
        arr[index] = nums2[j]
        j += 1
        index += 1
    nums1 = arr
    return nums1


if __name__ == '__main__':
    nums1 = [1, 2, 3, 0, 0, 0]
    nums2 = [2, 5, 6]
    arr = merge(nums1, 3, nums2, 3)
    print(arr)

时间复杂度:O(m+n)

空间复杂度:O(n)


java实现方法2:

   /**
     * 合并数组
     *
     * @param nums1 输入数组1
     * @param m     个数1
     * @param nums2 输入数字2
     * @param n     个数2
     * @return 返回数组
     */
    public int[] merge2(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i < n; i++) {
            nums1[m] = nums2[i];
            m++;
        }
        Arrays.sort(nums1);
        return nums1;
    }

时间复杂度:O(n.logn)

空间复杂度:O(n)


python实现方法2:

def merge2(A: List[int], m: int, B: List[int], n: int) -> None:
    '''
        按照要求合并链表
    Args:
        A: 链表A
        m: 位置m
        B: 链表B
        n: 位置n
    '''
    A = A[:m]
    A.extend(B)
    A.sort()       

时间复杂度:O(n.logn)

空间复杂度:O(n)


源码地址:https://github.com/zhangyu345293721/leetcode

你可能感兴趣的:(LeetCode)