Java 合并两个排序数组

题目:将两个排序好的数组组成一个新的排序好的数组,给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]

挑战

你能否优化你的算法,如果其中一个数组很大而另一个数组很小?

思路: 两根指针分别指向两个数组的开头,每次取值两个指针位置较小的数,指针后移,直到其中一个数组结束,将另外一个数组指针后面的元素连接到新数组的后面即可

关于挑战的情况 如果A[0]>B[B.length-1]||A[A.length-1]<B[0] ,可根据情况 直接将A连接到B的后面(或者B连接到A的后面)

代码如下

 public int[] mergeSortedArray(int[] A, int[] B) {
        int i=0;
        int j=0;
        int res[] = new int[A.length+B.length];
        int k=0;
        while(i<A.length&&j<B.length){
            if(A[i]<=B[j]){
                res[k++]=A[i++];
            }else{
                res[k++]=B[j++];
            }
        }

        if(i!=A.length){
            for(int a=i;a<A.length;a++){
                res[k++]=A[a];
            }
        }else{
            for(int b=j;b<B.length;b++){
                res[k++]=B[b];
            }

        }
        return res;
    }
}
时间: 2024-10-19 11:04:29

Java 合并两个排序数组的相关文章

java 合并两个byte数组

//java 合并两个byte数组 public static byte[] bytesMerger(byte[] byte_1, byte[] byte_2) { byte[] byte_3 = new byte[byte_1.length + byte_2.length]; System.arraycopy(byte_1, 0, byte_3, 0, byte_1.length); System.arraycopy(byte_2, 0, byte_3, byte_1.length, byte

双指针--合并两个排序数组

a1=[1,3,4,8,12] a2=[2,5,7,10,12,14] import copy ans=copy.copy(a1) p=0 q=0 while p<len(a1) and q<(len(a2)): if a2[q]>a1[p]: p+=1 else: ans.insert(p+q,a2[q]) q+=1 print(ans+a2[q:]) 原文地址:https://www.cnblogs.com/xiximayou/p/11620092.html

剑指offer_面试题17_合并两个排序的链表(两种思维)

题目:输入两个递增排序的链表,合并这两个链表,并使新链表中的结点仍然是按照递增排序的. 第一种思维:合并两个排序的链表,类似于合并两个排序数组,所不同的仅是一个用链表保存数据,一个用数组保存数据. 算法如下:(下面的算法前提是:头结点 不是 链表的第一个数据节点.) /**方法一:合并两个排序链表,使用了新创建的链表来保存,没有改动两个原始链表*/ ListNode *merge_tow_list(ListNode *pHead1,ListNode *pHead2) { if(NULL == p

[LeetCode]4. Median of Two Sorted Arrays两个排序数组合并后的中位数

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 解法一:不考虑时间复杂度限制在O(log(m+n)),则将两个数组遍历一遍即可以组合成一个排好序的数组,然后取数组的中位数即可,时间复杂度O(m+n): c

88. Merge Sorted Array【leetcode】算法,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 n

java合并两段音频成一段 同时播放类似伴奏

/** * * @param partsPaths 要合成的音频路径数组 * @param unitedFilePath 输入合并结果数组 */ public void uniteWavFile(String[] partsPaths, String unitedFilePath) { byte byte1[] = getByte(partsPaths[0]); byte byte2[] = getByte(partsPaths[1]); byte[] out = new byte[byte1.

面试题17:合并两个排序的链表

ListNode类(结点类) 1 package leetcode.utilities; 2 3 public class ListNode { 4 public int val ; 5 public ListNode next ; 6 public ListNode(int val) { 7 // TODO Auto-generated constructor stub 8 this.val = val; 9 this.next = null ; 10 } 11 //打印链表 12 publi

九章算法面试题62 合并k个排序数组

九章算法官网-原文网址 http://www.jiuzhang.com/problem/62/ 题目 给出K个排序好的数组,用什么方法可以最快的把他们合并成为一个排序数组? 在线测试本题 http://lintcode.com/en/problem/merge-k-sorted-lists/ 解答 这中题目分布式系统经常运用到,比如来自不同客户端的排序好的链表想要在主服务器上面合并起来. 一般这种题目有两种做法. 第一种做法比较容易想到,就是有点类似于MergeSort的思路,就是分治法.先把k

剑指Offer:合并两个排序的链表【25】

剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合并的链表之后,重复的执行此过程,最后如果那个链表已经走完,那就将另一个链表直接连接到合并的链表之后. Java题解 public static ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2;