如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?相关的知识,希望对你有一定的参考价值。
这很简单:代码如下(此处不考虑Object,假设为int[ ]):
public int[ ] getNewArrays(int[ ] one, int [] two)
int len=one.length;
int len2=two.length;
int len3=oneLength+twoLength; //得到两数组长度和;
int[] newArray=new int [len3]; //创建第三个数组,长度=两数组长度之和;
for(int i=0;i<len3;i++)
if(i<len) //如果i<len,则赋值为one中的元素;
newArray[i]=one[i];
continue;
int t=i-len; // t 从0开始
newArray[i]=two[t]; //后面的元素 赋值为two中的元素;
//对第三个数组一一赋值,值为前两个数组;
Arrays.sort(newArray); //对第三个数组排序;此处使用的是java自带的sort方法;
//也可使用冒泡排序,此处不演示;
return newArray;
完 参考技术A 不需要用循环吧,数组有addAll()方法,直接合并。
如果考虑到新数组的排序,直接用Arrays.sort()方法就可以了。 参考技术B class test
public static void main(String[] args)
int[] arr1 = new int[] 1, 2 ;
int[] arr2 = new int[] 5, 3, 4 ;
int[] newArr = getNew(arr1, arr2);
printArr(newArr);
static int[] getNew(int[] arr1, int[] arr2)
int len1 = arr1.length;
int len2 = arr2.length;
int len = arr1.length + arr2.length;
int[] newArr = new int[len];
int x = 0;
for(int i=0;i<newArr.length;i++)
if(i<len1)
newArr[i] = arr1[i];
else
newArr[i] = arr2[i - len1];
return newArr;
static void printArr(int[] arr)
String str = "[";
for (int i = 0; i < arr.length; i++)
int ele = arr[i];
str += ele;
if (i != arr.length - 1)
str += ",";
str += "]";
System.out.println(str);
参考技术C 将两个数组的元素传到一个数组内
首先定义两个数组 假设数组长度都为5 当然可以自己定义长度根据实际要求来
public class Test
public static void main (String [] args)
int [] arr1= new int [5];
int [] arr2= new int [5];
//此处调用方法 进行赋值调用
int [] newarr=getArray(arr1,arr2);//就可以得到新的数组了
//此处定义一个方法 把两个数组合并到一个新数组中去
public static int [] getArray(int [] arr1,int [] arr2 )
//下面定义一个新的数组newarr用来接收arr1,arr2数组的数据新数组的长度是原来两个数组长度之和,即arr1.length+arr2.length
int [] newarr= new int [arr1.length+arr2.length];
//然后进行数组的传递 先把arr1的元素传递给新数组 再把arr2的元素传递给新数组(newarr)
for(int i = 0;i<arr1.length;i++)
newarr[i]=arr1[i];
//此处把arr2的元素传递给新数组(newarr)
for(int i= 0;i<arr2.length;i++)
newarr[i+arr1.length]= arr2[i];//此处赋值的是arr1.length 以后的元素 因为newarr的数组长度是arr1.length+arr2.length;
return newarr;
参考技术D 广州疯狂JAVA课程 视频课程 疯狂JAVA书籍网络畅销第一 的
88. Merge Sorted Arrayleetcode算法,java将两个有序数组合并到一个数组中
88. Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
题目:
给定两个排序整数数组A和B,将b合并为一个排序数组。
注意:您可以假设a有足够的空间(大小大于或等于m + n)来保存来自B的附加元素。
分析:
循环递归解决即可,最大的在最后,倒序进行处理
方法1:
1 public class Solution { 2 public void merge(int[] nums1, int m, int[] nums2, int n) { 3 // 特别注意这里的m只是nums1中元素的个数,不是最终第一个数组的长度 不要用m=nums1.length;不然会造成数据越界的报错 4 5 int i=m-1,j=n-1,index=m+n-1; 6 7 while(i>=0&&j>=0){ 8 if(nums1[i]>nums2[j]){ 9 //A大就把A的数组放在更后面 10 nums1[index--]=nums1[i--]; 11 12 } 13 else{ 14 nums1[index--]=nums2[j--]; 15 16 } 17 } 18 while(i>=0){ 19 //A大就把A的数组放在更后面 20 nums1[index--]=nums1[i--]; 21 } 22 while(j>=0){ 23 nums1[index--]=nums2[j--]; 24 } 25 26 } 27 }
方法二:三行代码
public class Solution { 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--]; } }
以上是关于如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?的主要内容,如果未能解决你的问题,请参考以下文章