【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 }

 

测试结果:

转载于:https://www.cnblogs.com/zhangboy/p/6497292.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值