标签:处理 元素 style 代码 detail 假设 详细 get 示例
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
示例:
输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6]
这道题,第一想法是动态插入,但是种种错误导致了失败,特别是没有考虑到当nums1遍历完了后,nums2剩下的元素怎么处理。循环不太好写。
参考了代码,发现了还是空间换复杂度的做法。新建立一个数组存放两个数组的当前最小值,存放完了索引加1,继续寻找两个数组中的最小值。这样做下去,直到nums1遍历完或者nums2遍历完。
这时候,假设nums1没遍历完,那么nums2肯定遍历完了,就把nums1的值塞到尾部。如果nums2没遍历完,那么nums1肯定遍历完了,把nums2塞到尾部。这里可以根据当前位置的索引来判断。
参考的链接(他的题解不够详细):https://blog.csdn.net/qq_38595487/article/details/79935382
代码如下:
1 class Solution { 2 public void merge(int[] nums1, int m, int[] nums2, int n) { 3 int[] newnums=new int[m+n]; 4 int index=0; 5 int i=0,j=0; 6 while(i<m && j<n) 7 { 8 if(nums1[i]<nums2[j]) 9 newnums[index++]=nums1[i++]; 10 else 11 newnums[index++]=nums2[j++]; 12 } 13 while(i<m) 14 newnums[index++]=nums1[i++]; 15 while(j<n) 16 newnums[index++]=nums2[j++]; 17 System.arraycopy(newnums,0,nums1,0,newnums.length); 18 19 } 20 }
标签:处理 元素 style 代码 detail 假设 详细 get 示例
原文地址:https://www.cnblogs.com/axiangcoding/p/10034469.html