Leetcode-88.合并两个有序数组

开始想法:nums2 接着nums1 后面全都存进去,直接Arrays.sort解决,后来看了一下归并排序,发现就是一次合并的过程。

简单题,记录一下。

思路:开一个数组与nums1大小相同(int[] temp = new int[nums1.length])。在来一个int t = 0;m,n分别是两个数组中有效的数字个数(两个数组有序).分别从0到m-1 / 从0到n-1比较nums1与nums2的值,谁小就存到temp[t++]中.这样存完之后会剩下较大的值,因为数组已经排好顺
序,nums2里面有剩余的较大值,就再把剩下的值存到temp[]中.

最后将temp中的值全部拷贝到nums1中

完毕

附上代码

public class Mmerge {  
public static void merge(int[] nums1, int m, int[] nums2, int n) {
	        int i = 0;
	        int j = 0;
	        int t = 0;
	        int[] temp = new int[nums1.length];
	        while(i < m && j < n)
	            temp[t++] = nums1[i] > nums2[j] ? nums2[j++] : nums1[i++];
	        while(i <  m) {
	        	System.out.println("执行1");
	            temp[t++] = nums1[i++];
	        }
	        while(j < n) {
	        	System.out.println("执行2");
	        	temp[t++] = nums2[j++];
	        }
	        t = 0;
	        int k = 0;

	        while(t < nums1.length) 
	            nums1[k++] = temp[t++];         
	  }
  public static void main(String[] args)
	  {
//		  Arrays.sort();
//		  Arrays.asList()
		  int[] a = new int[] {1,2,3,0,0,0};
		  int[] b = new int[] {2,5,6};
		  merge(a,3,b,3);
		  for(int h : a)
			  System.out.print(h+" ");
//输出结果 1 2 2 3 5 6
//多记录一下,将a[]中换成{1,7,8,0,0,0} 则 在第一个while中:7,8这两个值会余下,在第二个while中(i < m)成立,则将7,8放在temp[4]与temp[5]之中。
		  
	  }
}

记录一点其他知识(从其他文章获得,觉得容易理解) 关于时间复杂度,算法的基本操作重复执行次数是模块n的某一函数f(n),

算法的时间复杂度记为T(n) = O(f(n)),随着n的增大,算法执行的时间增长率f(n)的增长率成正比

于是,f(n)越小,算法时间复杂度小,算法效率高

根据归并排序的时间复杂度 Nlogn 计算了一下

6*100w = 6000000次就可以了

跟冒泡比较一下,冒泡是 100w * 100w 次 归并是 6 * 100w 次

完毕

有不对的地方请指正,希望与大家多多交流。

  • 1
    点赞
  • 0
    收藏 更改收藏夹
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Feeling Fine

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值