龙空技术网

LeetCode算法第88题:合并两个有序数组

小天使淘淘 495

前言:

而今姐妹们对“java 合并两个有序数组”可能比较重视,朋友们都想要知道一些“java 合并两个有序数组”的相关文章。那么小编也在网上搜集了一些有关“java 合并两个有序数组””的相关资讯,希望小伙伴们能喜欢,看官们快快来学习一下吧!

题目描述:

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

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n。

你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

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

思路:

因为数组 nums1 和 nums2 都是有序的,并且 nums1 有足够的空间,因此我们可以从数组 nums1 的下标 m + n - 1 处开始存放两个数组合并后的数据。通过对两个数组逆向遍历,然后将值比较大的元素在数组 nums1 指定的位置开始逆向存储。

Java代码:

public void merge(int[] nums1, int m, int[] nums2, int n) { int pos = m + n - 1; int nums1End = m - 1; int nums2End = n - 1;				while(pos >= 0){			if(nums1End >= 0 && nums2End >= 0){				if(nums1[nums1End] < nums2[nums2End]){					nums1[pos -- ] = nums2[nums2End--];				}else{					nums1[pos -- ] = nums1[nums1End--];				}			}else if(nums1End >= 0){				nums1[pos -- ] = nums1[nums1End--];			}else{				nums1[pos -- ] = nums2[nums2End--];			}					} }

标签: #java 合并两个有序数组