1 Star 0 Fork 0

vince_zww / algo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
LeetCode_88.java 2.87 KB
一键复制 编辑 原始数据 按行查看 历史
vince_zww 提交于 2019-09-12 18:14 . LeetCode_88:合并两个有序数组
package leetcode;
import java.util.Arrays;
/**
* @author: vince_zww
* @date: 2019/8/29 18:41
* @desceription:
* 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
*
*说明:
*
*初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
*你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
*示例:
*
*输入:
*nums1 = [1,2,3,0,0,0], m = 3
*nums2 = [2,5,6], n = 3
*
*输出: [1,2,2,3,5,6]
*/
public class LeetCode_88 {
public static void main(String[] args) {
int[] nums1 ={1,2,3,0,0,0};
int m = 3;
int[] nums2 ={2,5,6};
int n = 3;
System.out.println(Arrays.toString(merge1(nums1,m,nums2,n)));
System.out.println(Arrays.toString(merge2(nums1,m,nums2,n)));
System.out.println(Arrays.toString(merge3(nums1,m,nums2,n)));
}
/**
* 数组解决方案
* 自己思考的方案,确实比较臃肿
*/
private static int[] merge1(int[] nums1, int m, int[] nums2, int n) {
for (int l = 0; l < n; l++) {
int num2 = nums2[l];
for (int i = 0; i < nums1.length; i++) {
if (num2 < nums1[i]) {
int j = i;
int k = nums1.length;
while (k > j) {
if ((k - 2) >= 0) {
nums1[k - 1] = nums1[k - 2];
k--;
} else {
break;
}
}
nums1[i] = num2;
m++;
break;
}
if(i>=m){
nums1[m]=num2;
m++;
break;
}
}
}
return nums1;
}
/**
* 讨论区解决方案
*
*/
private static int[] merge2(int[] nums1, int m, int[] nums2, int n) {
if(nums1 == null || nums2 == null || m < 0 || n<= 0){
return nums1;
}
//从后往前
int index1 = nums1.length - 1;
int index2 = nums2.length - 1;
while(m >= 0 && index2 >= 0){
if(m == 0){
nums1[index1--] = nums2[index2--];
}
else{
if(nums2[index2] > nums1[m- 1]){
nums1[index1--] = nums2[index2--];
}
else{
nums1[index1--] = nums1[--m];
}
}
}
return nums1;
}
/**
* 官方解决方案
* 直接使用内置函数,简单又方便
*/
private static int[] merge3(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n);
Arrays.sort(nums1);
return nums1;
}
}
Java
1
https://gitee.com/vince_zww/algo.git
git@gitee.com:vince_zww/algo.git
vince_zww
algo
algo
master

搜索帮助