【LeetCode每日一题】——88.合并两个有效数组

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目注意】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 数组

二【题目难度】

  • 简单

三【题目编号】

  • 88.合并两个有效数组

四【题目描述】

  • 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

五【题目示例】

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

六【题目注意】

  • n u m s 1. l e n g t h = = m + n nums1.length == m + n nums1.length==m+n
  • n u m s 2. l e n g t h = = n nums2.length == n nums2.length==n
  • 0 < = m , n < = 200 0 <= m, n <= 200 0<=m,n<=200
  • 1 < = m + n < = 200 1 <= m + n <= 200 1<=m+n<=200
  • − 1 0 9 < = n u m s 1 [ i ] , n u m s 2 [ i ] < = 1 0 9 -10^9 <= nums1[i], nums2[i] <= 10^9 109<=nums1[i],nums2[i]<=109

七【解题思路】

  • 从后向前遍历,设置双指针为两个数组有元素的位置,tail指向空位置,每次比较都把最大的放到tail指向的位置即可

八【时间频度】

  • 时间复杂度: O ( N ) O(N) O(N)

九【代码实现】

  1. Java语言版
package Array;

public class p88_MergeSortedArray {

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 3, 0, 0, 0};
        int[] nums2 = {2, 5, 6};
        merge(nums1, 3, nums2, 3);
    }

    public static void merge(int[] nums1, int m, int[] nums2, int n) {
        // 从后向前填充
        int index1 = m - 1;
        int index2 = n - 1;
        int tail = m + n - 1;
        // 只要是大的元素就写到nums1的后面,前面留出来位置就是nums2的元素
        while (index2 >= 0) {
            if (index1 >= 0 && nums1[index1] > nums2[index2]) {
                nums1[tail] = nums1[index1];
                tail--;
                index1--;
            } else {
                nums1[tail] = nums2[index2];
                tail--;
                index2--;
            }
        }
        for (int i = 0; i < nums1.length; i++) {
            System.out.print(nums1[i]);
        }
    }

}
  1. C语言版
#include
#include
#include

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
	/*从后向前填充*/
	int index1 = m - 1;
	int index2 = n - 1;
	int tail = m + n - 1;
	/*只要是大的元素就写到nums1的后面,前面留出来位置就是nums2的元素*/
	while (index2 >= 0)
	{
		if (index1 >= 0 && nums1[index1] > nums2[index2])
		{
			nums1[tail] = nums1[index1];
			tail--;
			index1--;
		}
		else
		{
			nums1[tail] = nums2[index2];
			tail--;
			index2--;
		}
	}
}

/*主函数省略*/

十【提交结果】

  1. Java语言版
    【LeetCode每日一题】——88.合并两个有效数组_第1张图片
  2. C语言版
    【LeetCode每日一题】——88.合并两个有效数组_第2张图片

你可能感兴趣的:(LeetCode,leetcode,数据结构,算法,数组,双指针)