【LeeCode88】Merge Sorted Array★
1.题目描述:
2.解题思路:
题意:两个由整数构成的有序数组nums1和nums2,合并nums2到nums1,使之成为一个有序数组。注意,假设数组nums1有足够的空间存储nums1和nums2的所有元素(>=m+n)。
思路很简单,直接上代码。
3.Java代码:
(1)普通
1 //public class LeetCode88 为测试代码 2 public class LeetCode88 { 3 public static void main(String[] args) { 4 int[] nums1=new int[8]; 5 nums1[0]=1; 6 nums1[1]=3; 7 nums1[2]=5; 8 System.out.println("初始时nums1:"+nums1[0]+","+nums1[1]+","+nums1[2]); 9 int[] nums2={2,4,6,8}; 10 new Solution().merge(nums1, 3, nums2, 4); 11 System.out.print("合并后nums1:"+nums1[0]); 12 for(int i=1;i<nums1.length-1;i++){ 13 System.out.print(","+nums1[i]); 14 } 15 } 16 } 17 18 //class Solution为ac代码 19 class Solution { 20 public void merge(int[] nums1, int m, int[] nums2, int n) { 21 int i=m-1,j=n-1,k=m+n-1; 22 while(i>-1&&j>-1) nums1[k--]=(nums1[i]>nums2[j])?nums1[i--]:nums2[j--]; 23 while(j>-1) nums1[k--]=nums2[j--]; 24 } 25 }
测试结果:
(2)更简洁写法(来自网上大神,一行代码解决!):
1 //public class LeetCode88 为测试代码 2 public class LeetCode88 { 3 public static void main(String[] args) { 4 int[] nums1=new int[8]; 5 nums1[0]=1; 6 nums1[1]=3; 7 nums1[2]=5; 8 System.out.println("初始时nums1:"+nums1[0]+","+nums1[1]+","+nums1[2]); 9 int[] nums2={2,4,6,8}; 10 new Solution().merge(nums1, 3, nums2, 4); 11 System.out.print("合并后nums1:"+nums1[0]); 12 for(int i=1;i<nums1.length-1;i++){ 13 System.out.print(","+nums1[i]); 14 } 15 } 16 } 17 18 //class Solution为ac代码 19 class Solution { 20 public void merge(int[] nums1, int m, int[] nums2, int n) { 21 while(n>0) nums1[m+n-1]=(m==0||nums2[n-1]>nums1[m-1])?nums2[--n]:nums1[--m]; 22 } 23 }
测试结果: