Merge Sorted Array——LeetCode
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are mand n respectively.
https://leetcode.com/problems/merge-sorted-array/
题意就是给定两个有序数组,把B中的元素合并到A中,可以假定A中有足够的空间。
怎么做才能是时间复杂度最低呢,与合并两个有序链表不同,两个数组的元素是可以通过下标直接访问的,而且要合并两个数组,元素肯定是要移动的,不像链表中改变一下next指针就可以了。最优的方式当时是从后往前遍历,因为合并的数组大小为m+n,那么合并后的数组最后一个元素的下标就是m+n-2,依次比较两个数组最末的元素,把较大的一个放置在合并后的数组的末端。
Talk is cheap>>
首先上清晰版,边界也清晰的处理了:
public void merge(int A[], int m, int B[], int n) {
int i = 1, j = 1;
if (m == 0) {
System.arraycopy(B,0,A,0,n);
return;
}
if (n == 0)
return;
while (i <= m && j <= n) {
while (i <= m && j <= n && A[m - i] >= B[n - j]) {
A[m + n - i - j + 1] = A[m - i];
i++;
}
while (i <= m && j <= n && A[m - i] < B[n - j]) {
A[m + n - i - j + 1] = B[n - j];
j++;
}
}
if (j <= n) {
System.arraycopy(B, 0, A, 0, m + n - i - j + 2);
}
}
下面是压缩版,把边界条件缩入了while和if的判断中,并且压缩了while主循环,两个方法的执行时间几乎是一样的:
public void merge(int A[], int m, int B[], int n) {
int i = 1, j = 1;
while (i <= m && j <= n) {
A[m + n - i - j + 1] = A[m - i] > B[n - j] ? A[m - i++] : B[n - j++];
}
if (j <= n) {
System.arraycopy(B, 0, A, 0, m + n - i - j + 2);
}
}
Merge Sorted Array——LeetCode的更多相关文章
- Merge Sorted Array [LeetCode]
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...
- Merge Sorted Array leetcode java(回顾MergeTwoArray和MergeTwoLinkedList)
题目: Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assum ...
- [LeetCode] Merge Sorted Array 混合插入有序数组
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...
- [LeetCode] 88. Merge Sorted Array 混合插入有序数组
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...
- 【LeetCode练习题】Merge Sorted Array
Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...
- Leetcode#88. Merge Sorted Array(合并两个有序数组)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 【LeetCode】88. Merge Sorted Array (2 solutions)
Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...
- LeetCode练题——88. Merge Sorted Array
1.题目 88. Merge Sorted Array——Easy Given two sorted integer arrays nums1 and nums2, merge nums2 into ...
- 43. Merge Sorted Array && LRU Cache
Merge Sorted Array OJ: https://oj.leetcode.com/problems/merge-sorted-array/ Given two sorted integer ...
随机推荐
- [转] Are You Making a Big Mistake in This Volatile Market?
Stock market volatility continues unabated. It may be too early to tell, but I’m marking the top of ...
- Scala的一些语言特点
1. 所有的基本数据类型都是对象,比如数值1的所说的类是 scala.Int 2. 所有的运算符都是类成员方法,比如1+2调用1.+(2); 0 to 2 调用 0.to(2) 3. 数组的访问也是通 ...
- 尚未解决的intellij问题:补充措施
2016-12-06 遇到问题 D:\software\apache-tomcat-7.0.57\bin\catalina.bat run [2016-12-06 09:54:52,342] Arti ...
- UITextField控件处理键盘弹出时遮住输入框的问题
原文连接: http://www.devdiv.com/thread-70159-1-1.html 实现以下三个方法,如果弹出的键盘会遮住输入框 ,整体的界面会向上移动,这样就不会遮住输入框了.自己增 ...
- Linux shell入门基础(四)
四.进程优先级前台后台 01.进程控制 #find /name aaa & #ps aux | grep find #updatedb & #ps aux | grep update ...
- ASPNET5 管理应用程序的状态
1. 应用程序状态选项 在ASP.NET5当中,全局的Application对象没有了,转而被In Memory Caching所代替,ASPNET5当中有下多种管理状态的方式: HttpContex ...
- dota监测
漫漫长假一个人无聊得很,整日DOTA,打的腰酸背痛腿抽筋的.就想着写一个脚本记录自己每天打游戏的时间,于是就产生了下面的这个东西... 运行环境:win7 32位. python版本:3.4.1 由于 ...
- 【USACO 1.2.1】挤牛奶
[问题描述] 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻.第二个农民在700时刻开始,在 1200时刻结束.第 ...
- QQ情侣头像~
- 利用Warensoft Stock Service编写高频交易软件
利用Warensoft Stock Service编写高频交易软件 无论是哪种交易软件,对于程序员来讲,最麻烦的就是去实现各种算法.本文以SAR算法的实现过程为例,为大家说明如何使用Warensoft ...