LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)
题目:合并已排序数组
难度:Easy
题目内容:
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
翻译:
给定两个排序的整数数组nums1和nums2,将nums2合并到nums1中作为一个排序数组。
注意:
nums1和nums2中初始化的元素数量分别为m和n。
nums1有足够的空间(大小大于或等于m+n)来容纳nums2中的额外元素。
我的思路:此处和归并排序中的小段归并有点像,不一样的地方在于在于其中nums1数组的长度是合并之后的长度。
这样一来用传统的归并排序中的合并就不行了,因为在合并过程中可能将nums1数组中的数覆盖掉(eg.【4,5,0,0】【1,2】)
除非再新建一个临时数组,将二者合并一起放入此数组中,然后再将此数组的值全部复制到nums1,那这样nums1的长度就没什么意义了。
所以可以考虑归并排序的第二种方法———插入排序。原理不再赘述。把nums2直接当作接在nums1后面的数即可。
三个指针:i 表示此时nums2的位置(从0开始);j表示此时nums1的位置(从m-1开始);k表示内部循环中nums1的位置。
我的代码:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int j = m - 1;
for (int i = 0; i < n; i++) {
if (j == -1 || nums2[i] >= nums1[j] ) {
while (i < n) {
nums1[++j] = nums2[i++];
}
return;
} else {
int k = j;
for (; k > -1 && nums1[k] > nums2[i]; k--) {
nums1[k+1] = nums1[k];
}
nums1[k+1] = nums2[i];
j++;
}
}
}
我的复杂度:O(N*M) 空间复杂度 O(1)
编码过程中的问题:
1、第4行,当m==0的时候,nums1内也是有一个0的,此时如果不加以判断,就会把0当作元素直接进入归并排序中去,然后就会越界,所以加入 j == -1 || 。
eg.【0】m=0【1】n=1。
2、第15行,忘记了此时放入了一个,nums1的指针需要向右移动一个 —— j++
答案代码:
public void merge(int A[], int m, int B[], int n) {
int i = m-1, j = n-1, k = m+n-1;
while (i>-1 && j>-1)
A[k--] = A[i] > B[j] ? A[i--] : B[j--];
while (j>-1)
A[k--] = B[j--];
}
答案思路:
既然从前往后会覆盖到,但是后面全是0,那么从后往前就不会覆盖到了。
(就算极端情况,A内全部小于B,后面的0刚好够B放,不会出现覆盖情况)
1、当 i 且 j 都没消耗完时,从后往前,谁大谁就入,并且相应指针消耗1;
2、如果 j 还没消耗完,则将B内剩下的都放入A;(此时如果A没消耗完也不需要管了,因为本来就已经在A里面按顺序排好了)
LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)的更多相关文章
- LeetCode Merge Sorted Array 合并已排序的数组
void merge(int A[], int m, int B[], int n) { int *a=A,*b=B; ,j=; ||m==){ //针对特殊情况,比如A或B中无元素的情况 & ...
- leetcode 题解:Remove Duplicates from Sorted Array(已排序数组去重)
题目: Given a sorted array, remove the duplicates in place such that each element appear only once and ...
- leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- LeetCode 153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中的最小值 (C++)
题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- [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 混合插入有序数组
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 ...
随机推荐
- Java compiler level does not match解决方法, java 修改编译用的jdk的方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- 从原型链看DOM--Comment,CDATASection,DocumentType,DocumentFragment,Attr类型
这次总结的是剩下的这些DOM类型节点,可能你见过却不经常使用但是了解一下总是好的,可以加深对DOM体系的整体理解~.本篇要介绍的是Comment,CDATASection,DocumentType,D ...
- PAT 1069 The Black Hole of Numbers[简单]
1069 The Black Hole of Numbers(20 分) For any 4-digit integer except the ones with all the digits bei ...
- (转)extern关键字两种场景的使用
第一种场景 -- extern extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其它文件中可见.用其声明的变量或函数应该在别的文件或同一文件的其它地方定义. 例如语句:exter ...
- 成员函数查找[条款24]---《C++必知必会》
调用一个成员函数,涉及三个步骤:第一步,编译器查找函数的名字:第二部,从可用候选者中选择最佳匹配函数:第三步,检查是否具有访问该函数的权限. #include<iostream> usin ...
- xphrof出现502问题
This is an xhprof bug and not a devel bug, but I thought I'd throw the workaround up here in case pe ...
- 【转】阿里巴巴技术专家杨晓明:基于Hadoop技术进行地理空间分析
转自:http://www.csdn.net/article/2015-01-23/2823687-geographic-space-base-Hadoop [编者按]交通领域正产生着海量的车辆位置点 ...
- cocos2d-x 2.x.x 新建工程 android下的 org文件夹丢失
cocos2d-x 2.x.x 新建工程之后... 打开android项目..会发现src下没有org文件... 解决方法一: cocos2d-x-2.2.0\cocos2dx\platform\an ...
- 877. Stone Game
问题 有偶数堆石头(数组长度为偶数),每堆石头有一些石头(数组元素为正),石头的总数是奇数.Alex和Lee两个人轮流取石头堆,每次可以从头部或尾部取,Alex先取. 给定这样一个数组,两人都以最优策 ...
- Zabbix 触发器函数方法整理
函数介绍 abschange 参数:忽略 支持类型:float,int,str,text,log 作用:返回最近获得的值与之前获得值差的绝对值,对于字符串类型:0表示相等,1表示不同 avg 参数:秒 ...