LeetCode.88 合并两个有序数组
作者:互联网
题目描述:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
与“替换空格”算法思想相同,利用题目中给定的“有序数组”条件,从两个数组的最后一个元素进行比较。
两个指针last1,last2,last1指向nums1的最后一个元素,last2指向nums2的最后一个元素。
定义len = m + n - 1 为nums1数组中的最后一个位置。
如果nums2的最后一个元素 > nums1的最后一个元素,直接放入nums1中的最后一个位置,len--,last2--. 否则就是 len--,last1--
class Solution { /** * * @param nums1 * @param m nums1数组中元素的个数 * @param nums2 * @param n nums2数组中元素的个数 */ public void merge(int[] nums1, int m, int[] nums2, int n) { //异常判断 if(nums1 == null || nums2 == null){ return ; } //nums1中最后一个元素的索引 int last1 = m - 1; //nums2中最后一个元素的索引 int last2 = n - 1; //nums1的最后一个位置的索引 int len = m + n - 1; while(last1 >= 0 && last2 >= 0){ //直接写成三元表达式更简洁 if(nums2[last2] > nums1[last1]){ nums1[len] = nums2[last2]; len--; last2--; }else{ nums1[len] = nums1[last1]; len--; last1--; } } //如果last1 < 0 说明 nums2中还有元素,全部复制到nums1中 for(int i = 0; i < last2+1 ; i++){ nums1[i] = nums2[i]; } } }
标签:数组,int,len,LeetCode.88,last1,有序,last2,nums1,nums2 来源: https://www.cnblogs.com/pxy-1999/p/13730433.html