合并两个有序数组

给定两个有序整数数组 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)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

c#

public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n) 
    {
        for(int i=m+n-1;i>=0;i--)
        {
            if(n<=0||(m>0&&nums1[m-1]>nums2[n-1]))
            
                nums1[i]=nums1[--m];
            
                
            else
            
                 nums1[i]=nums2[--n];
            
               
        }
        
    }
}
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n)
        {
            for (int i =m;i<m+n;i++)
            {
                
                nums1[i] = nums2[i-m];
                


            }
            Array.Sort(nums1);
        }
}
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n)
        {
            int i=m-1;
        int j=n-1;
        int k=m+n-1;
        while(i>=0&&j>=0)
        {
            if(nums1[i]>nums2[j])
                nums1[k--]=nums1[i--];
            else
                nums1[k--]=nums2[j--];
            
        }
        while(j>=0)
            nums1[k--]=nums2[j--];
        }
}
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n) 
    {
        int i=m+n-1;
       while(n>0)
        {
            if(m>0&&nums1[m-1]>nums2[n-1])
            
                nums1[i--]=nums1[--m];
            
                
            else
            
                 nums1[i--]=nums2[--n];
            
               
        }
        
    }
}
public class Solution {
    public void Merge(int[] nums1, int m, int[] nums2, int n) 
    {
        int[]temp=new int [m+n];
        int i=0,j=0,count=0;
        while(i<m&&j<n)
        {
            if(nums1[i]>nums2[j])
                temp[count++]=nums2[j++];
            else
                temp[count++]=nums1[i++];
        }
        while(i<m)
        {
            temp[count++]=nums1[i++];
        }
        while(j<n)
            temp[count++]=nums2[j++];
        for(int z=0;z<m+n;z++)
            nums1[z]=temp[z];
    }
}

在这里插入图片描述
继续加油!

python

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        nums1[:]=nums1[0:m]+nums2[:]
        nums1.sort()
        return nums1

思路一直接加起来,然后排序完事

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        length=n+m
        l=length
        temp=[]
        while m>0 or n>0:
            if m==0:
                nums1[:]=nums2[0:n]+nums1[length:l]
                break
            if n==0:
                nums1[:]=nums1[0:m]+nums1[length:l]
                break
            if nums1[m-1]>nums2[n-1]:
                nums1[length-1]=nums1[m-1]
                length-=1
                m-=1
            else:
                nums1[length-1]=nums2[n-1]
                length-=1
                n-=1

        return nums1

第二种方法我想利用它本身已经是有序数组的特点,按照大小分别从两个数组中读取出来,然后再用读取出来的数组覆盖原来的nums1

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        length=n+m
        l=length
        temp=[]
        while m>0 or n>0:
            if m==0:
                nums1[:]=nums2[0:n]+nums1[length:l]
                break
            if n==0:
                nums1[:]=nums1[0:m]+nums1[length:l]
                break
            if nums1[m-1]>nums2[n-1]:
                nums1[length-1]=nums1[m-1]
                length-=1
                m-=1
            else:
                nums1[length-1]=nums2[n-1]
                length-=1
                n-=1

        return nums1

第二种方法的时候我们发现是使用了一个额外的数组空间,我们想一下可不可以省去这个数组空间直接在原nums1上进行数组的读取,我们发现题目中描述nums1中m后面的位数出差你的数据是没用的,所以假如我们按照从大到小的思路往nums1中读取数字就可以解决这些问题了,实现了节约了法二的那个数组空间。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值