来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array

1、题目

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

2、第一种求解方法

先将两个数组合并为一个数组,然后调用api中的自动排序方法。sort使用的是快速排序

使用API

class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i =0;i<n;i++){
nums1[m+i]=nums2[i];
}
Arrays.sort(nums1); }
}

3、第二种解法

辅助数组,然后使用两个指针分别指向两个数组的开始索引位置。比较两个索引数据大小,较小的放入辅助数组,然后指针加1(索引指向下一个元素)。然后继续比较
当两个数组大小不一致的时候,当比较结束其中一个数组时,将剩下的数组中的数据依次放入辅助数组。
最后在将辅助数组赋值给之前的数组。

使用辅助数组、会增加内存空间的消耗。

class Solution {

    public void merge(int[] nums1, int m, int[] nums2, int n){
int k =m+n;
int [] temp = new int[k];
int nums1Index=0,nums2Index=0;
for(int index=0;index < k;index++){
if(nums1Index >=m){
temp[index]=nums2[nums2Index++];
}else if(nums2Index >= n){
temp[index] = nums1[nums1Index++];
}else if(nums1[nums1Index]>nums2[nums2Index]){
temp[index] = nums2[nums2Index++];
}else{
temp[index] = nums1[nums1Index++];
}
} for(int i=0;i<k;i++){
nums1[i]=temp[i];
} }
}

3、第三种解法

依然采取双指针的形式,指针指向两个数组的尾部。然后比较大小,将较大的数据放入数组的最后位置、同时移动该索引的位置。这样就可以避免辅助数组的使用。

class Solution {

public void merge(int[] nums1, int m, int[] nums2, int n){
int k=m+n;
int nums1Index = m-1,nums2Index = n-1;
for(int index =k-1;index>=0;index--){
if(nums1Index < 0){
nums1[index]=nums2[nums2Index--];//nums1已经拿完,只需拿nums2
}else if(nums2Index < 0){
break;//nums2的已经拿完,nums1的不需要在动
}else if(nums1[nums1Index]>nums2[nums2Index]){
nums1[index] = nums1[nums1Index--];
}else{
nums1[index] =nums2[nums2Index--];
}
}
} }

LeetCode------合并两个有序数组(4)【数组】的更多相关文章

  1. leetcode 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: - 初始化 nums1 和 nums2 的元素数量分别为 m 和 ...

  2. Leetcode:合并两个有序链表

    class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return ...

  3. leetcode 88. C++ 合并两个有序数组

    Leetcode 88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 ...

  4. 每日一道 LeetCode (19):合并两个有序数组

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  5. 【python】【补】Leetcode每日一题-合并两个有序数组

    [python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...

  6. [LeetCode每日一题]88. 合并两个有序数组

    [LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...

  7. Leetcode#88. Merge Sorted Array(合并两个有序数组)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  8. Leetcode 88 合并两个有序数组 Python

    合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...

  9. Java实现 LeetCode 88 合并两个有序数组

    88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...

  10. 【LeetCode】88. 合并两个有序数组

    88. 合并两个有序数组 知识点:数组:排序:双指针: 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 ...

随机推荐

  1. Redis-浅谈主从同步

    主从库集群 Redis 提供了主从库模式,以保证数据副本的一致,在从库执行一下命令可以建立主从库关系: replicaof <dst ip> <dst port> Redis ...

  2. 张高兴的 .NET IoT 入门指南:(八)基于 GPS 的 NTP 时间同步服务器

    时间究竟是什么?这既可以是一个哲学问题,也可以是一个物理问题.古人对太阳进行观测,利用太阳的投影发明了日晷,定义了最初的时间.随着科技的发展,天文观测的精度也越来越准确,人们发现地球的自转并不是完全一 ...

  3. 感谢有你!Apache DolphinScheduler 项目 GitHub star 突破 8k

    本周伊始,Apache DolphinScheduler 项目在 GitHub 上的 Github Star 总数首次突破 8K.目前,Apache DolphinScheduler 社区已经拥有 C ...

  4. 基于 DolphinScheduler 的数据质量检查实践

    今天给大家带来的分享是基于 Apache DolphinScheduler 的数据质量检查实践,分享的内容主要为以下四点: " 为什么要做数据质量检查? 为什么要基于 DolphinSche ...

  5. git submodule 实战

    1.git submodule指什么 关于git submodule是什么,可以看下面这个链接. https://www.cnblogs.com/hwx0000/p/14146838.html 2.g ...

  6. 批量获取代理ip

    获取站大爷免费代理ip,然后打印出来,也可以把他存放在其他容器中 # coding:utf-8 import requests, re requests.packages.urllib3.disabl ...

  7. helm安装kube-state-metrics-4.16.0

    Application version 2.5.0 Chart version 4.16.0 获取chart包 helm repo add prometheus-community https://p ...

  8. SpringMvc(二)- 请求处理参数 和 响应数据处理

    1.请求处理参数 1.1 请求参数 @RequestParam 1.1.1 不使用 @RequestParam 注解 请求参数处理,不使用参数注解: 1.如果请求参数名和请求处理的形参名一致,spri ...

  9. Oracle与KingbaseES的NULL在索引使用上的区别

    NULL值是关系型数据库系统中比较特殊的一种值,通常称为UNKNOWN或空值,即是未知的,不确定的.由于NULL存在着无数的可能,因此NULL值也不等于NULL值. Oracle在创建索引时,不会存储 ...

  10. spark 读取Geomesa(Hbase)数据

    package com.grady.geomesa import org.apache.hadoop.conf.Configuration import org.apache.spark.SparkC ...