[LeetCode][Java] Merge Sorted Array
2015-07-19 20:55
405 查看
题目:
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1and nums2 are m and n respectively.
题意:
给定两个有序的数组nums1 and nums2,将两个数组合并为一个有序的数组。注意:
你可以假设nums1 中具有足够大的空间(大于等于m + n)从而能够包含来自nums2
的额外的元素。nums1and nums2中起始元素的个数分别为m and n.
算法分析:
方法一:第一次AC时没有考虑过多的空间复杂度的事情,开辟了一个新的数组来包含num1和nums2中的合并元素,然后在用这个新的数组重新覆盖nums1.
利用两个指针,分别遍历nums1和nums2,比较其中比较大的元素放入新的数组中。
方法二:
对每个数组维护一个指针,然后比较指针所指的值,每次迭代中A和B指向的元素大的便加入结果数组中,然后index-1,另一个不动。这里从后往前扫是因为这个题目中结果仍然放在A中,如果从前扫会有覆盖掉未检查的元素的可能性。
AC代码:
方法一:<span style="font-family:Microsoft YaHei;font-size:12px;">public class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if(n == 0) return; if(m == 0) { for(int i=0;i<n;i++) { nums1[i]=nums2[i]; } return; } int nums1index=0; int nums2index=0; int newnums[]=new int[m+n]; int i=0; while(nums1index<=m-1&&nums2index<=n-1)//两个数组中公共长度部分 { if(nums1[nums1index]<nums2[nums2index]) { newnums[i]=nums1[nums1index]; nums1index++; i++; } else { newnums[i]=nums2[nums2index]; nums2index++; i++; } } while(nums1index<=m&&nums2index<=n) { if(nums1index==m&&nums2index<=n-1)//数组二多于数组一的情况 { newnums[i]=nums2[nums2index]; nums2index++; i++; } else if(nums2index==n&&nums1index<=m-1)//数组一多于数组二的情况 { newnums[i]=nums1[nums1index]; nums1index++; i++; } else break; } for(i=0;i<m+n;i++) nums1[i]=newnums[i]; } }</span>
方法二:
<span style="font-family:Microsoft YaHei;font-size:12px;">public class Solution { public void merge(int A[], int m, int B[], int n) { while(m > 0 && n > 0) { if(A[m-1] > B[n-1]) { A[m+n-1] = A[m-1]; m--; } else { A[m+n-1] = B[n-1]; n--; } } while(n > 0){ A[m+n-1] = B[n-1]; n--; } } }</span>
相关文章推荐
- Java IO练习
- eclipse SDK更新管理器安装插件
- cmd下运行java程序的注意事项
- 三次握手和四次挥手的小结
- java web 开发中hibernate常见的基础问题
- Java跨平台原理
- 01 JAVA 基础补充 浮点数的比较
- JAVA基金会 (三)反射 反思的深度分析
- java并发 使用ScheduledExecutor的温室控制器--thinking in java 21.7.5
- Java-java中冒号(:)的用法
- Spring AOP
- Maven+Eclipse+Hadoop第一个WordCount
- [LeetCode][Java] Scramble String
- java urlrewrite
- JAVA——Iterable接口
- java bean
- Myeclipse中修改了某些配置后不生效
- MyEclipse的内存溢出问题
- java判断list为空的方法
- Java调用C#步奏详解