精华内容
下载资源
问答
  • 题目:有两个有序数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。思路:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置,每次比较都是比较...

    题目:有两个有序数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

    思路:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置,

    每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个集合遍历结束,将另一个集合剩余部分加入新集合中

    public class MyClass {

    public static void main(String[] args) {

    int[] num1 = new int[]{1, 2, 4, 6, 7, 123, 411, 5334, 1414141, 1314141414};

    int[] num2 = new int[]{0, 2, 5, 7, 89, 113, 5623, 6353, 134134};

    //变量用于存储两个集合应该被比较的索引(存入新集合就加一)

    int a = 0;

    int b = 0;

    int[] num3 = new int[num1.length + num2.length];

    for (int i = 0; i < num3.length; i++) {

    if (a < num1.length && b < num2.length) { //两数组都未遍历完,相互比较后加入

    if (num1[a] > num2[b]) {

    num3[i] = num2[b];

    b++;

    } else {

    num3[i] = num1[a];

    a++;

    }

    } else if (a < num1.length) { //num2已经遍历完,无需比较,直接将剩余num1加入

    num3[i] = num1[a];

    a++;

    } else if (b < num2.length) { //num1已经遍历完,无需比较,直接将剩余num2加入

    num3[i] = num2[b];

    b++;

    }

    }

    System.out.println("排序后:" + Arrays.toString(num3));

    }

    }

    展开全文
  • 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. ...

     

    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 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--];
            
        }
    }

    复制代码

     

    不积跬步无以至千里,千里之堤毁于蚁穴。 你是点滴积累成就你,你的丝丝懒惰毁掉你。 与诸君共

     

    展开全文
  • 一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在...

    归并算法之有序数组合并算法实现

    一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在合并数组中的位置并插入,直到某个数组指针到达尾部。再将另一个数组剩下的所有元素,直接放入归并数组尾部。算法的简单实现,需要注意的是对参数的校验,判断数组是否有序。 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    public class MergeOrderedArray {
     public static int[] merge(int [] a,int []b){
      if(!isOrderedArray(a)){
       System.out.println(" array a is not an ordered array.");
       return null;
      }
         
      if(!isOrderedArray(b)){
       System.out.println(" array b is not an ordered array.");
       return null;
      }
        
      int a_len = a.length;
      int b_len = b.length;
      int[] merge = new int[a_len+b_len];
      int i=0,j=0,k=0;
      while(i<a_len&&j<b_len){
       if(a[i]<b[j]){
        merge[k++]=a[i++];
       }else{
        merge[k++]=b[j++];
       }
      }
        
      //A数组全部合并完毕,将b数组剩余直接加入合并数组
      if(i==a_len){
       for(;j<b_len;j++){
        merge[k++]= b[j];
       }
      }else{
       for(;i<a_len;i++){
        merge[k++]= a[i];
       }
      }
        
      return merge;
        
     }
      
     public static boolean isOrderedArray(int [] array){
      if(array==null||array.length==0){
       return false;
      }
        
      for(int i = 0;i<array.length-1;i++){
       if(array[i]>array[i+1]){
        return false;
       }
      }
      return true;
     }
       
     public static void main(String[] args) {
      int a [] = {1,2,3,4,5};
      int b [] = {2,3,4,5,6,7,8,9};
      int [] merge = merge(a,b);
      System.out.println(Arrays.toString(merge));
     }
    }

          算法的时间复杂度,取决于待合并的两个数组的长度,所以是O(M+N),空间复杂度也是O(M+N),即需要的归并数组的长度是M+N。

     

     

     
    Spring Security入门实战权限控制
    2017年版JAVA核心技术(全套) attach_img
    传智播客两套Hibernate经典开发课程合集 从零开始学习Hibernate视频教程 attach_img
    Java网络爬虫程序原理解析 attach_img
    Nginx服务器集群搭建课程 Nginx实战培训课程+代码+资料 Nginx入门到实战视频教程 attach_img
    Java支付系统微服务架构系统实战
    Spring Boot相关13套视频教程合辑
    基于spring-boot-1.4.x的Spring Boot 教程全集-某果学院价值299元教程 attach_img
    C++,java算法与数据结构-某课网价值166元实战教程 attach_img
    Java Spring boot项目实战微信点餐视频教程-某课网价值348元实战教程 attach_img  ...2
    亿级流量电商详情页系统的大型高并发与高可用缓存架构实战(第一版+第二版) attach_img
    【自动化测试】Selenium基于Java快速入门视频教程 13课 attach_img
    selenium基于Java测试实战视频教程 18课 attach_img
    selenium2基于Java与WebDriver视频教程 8课 attach_img
    【自动化测试】selenium2基于Java入门到精通视频教程 11课 attach_img
    Apache Mina网络通信架构视频教程 高可用网络应用程序开发Mina视频教程 attach_img
    极速入门–Spring MVC、MyBatis、Shiro三大模块快速入门学习视频教程 attach_img
    北风网ExtJS培训视频教程 ExtJS基础课程+ExtJS项目实战(两套)北风网ExtJS在线培训 attach_img
    10个超经典的JAVA项目学习 从功能概述到模块设计与维护 外加美女讲师友情客串 attach_img
    李兴华老师JAVA实战培训视频教程 JAVA开发实战李兴华60小时视频讲解 JAVA案例讲解 attach_img

    转载于:https://www.cnblogs.com/winifredaf/p/10016855.html

    展开全文
  • 对于两个有序数组arrayM,arrayN,长度分别为m和n;将这两个数组合并成一个数组进行排序,要求时间复杂度为O(m+n); 2. 解题思路: 定义一个数组res,长度为m+n; 定义两个index,分别为indexM、indexN,用来...

    1. 问题描述:

    对于两个有序数组arrayM,arrayN,长度分别为m和n;将这两个数组合并成一个数组并进行排序,要求时间复杂度为O(m+n);

    2. 解题思路:

    1. 定义一个数组res,长度为m+n;
    2. 定义两个index,分别为indexM、indexN,用来记录数组arrayM、arrayN的下标;
    3. 通过分别遍历数组arrayM和arrayN的方式来比较每个值的大小,并将值存放到res中;
    4. 判断indexM和indexN是否分别小于m、n,如果小于则继续执行,否则则表示有一个array遍历结束,需要单独对另一个array操作;
    5. 具体代码如下:
    //定义两个数组下标,遍历并记录index使用;
            int indexM =0;
            int indexN =0;
            int[] arrayM = new int[]{1,4,6,7,8};
            int[] arrayN = new int[]{2,3,5,9,11};
            //定义汇总数组的index;
            int k=0;
            //定义一个汇总数组
            int[] res = new int[arrayM.length+arrayN.length];
    
            //使用while循环遍历;当indexM或者indexN中有任意一个值为M或者N时,则表示当前某一个数组遍历到尾部
            while(indexM<arrayM.length&&indexN<arrayN.length){
                if (arrayM[indexM]<=arrayN[indexN]){
                    res[k]=arrayM[indexM];
                    indexM++;
                }else{
                    res[k]=arrayN[indexN];
                    indexN++;
                }
                k++;
            }
            // 判断哪一个数组被遍历到尾部,则此处将另一个数组添加到汇总数组中即可;
            // 此时 a =indexM,并a++,将M数组中剩余值添加到res中;
            if(indexM!=arrayM.length){
                for(int a = indexM ;a<arrayM.length;a++){
                    res[k]=arrayM[a];
                    k++;
                }
            }else{
                // 此时 a =indexM,并a++,将M数组中剩余值添加到res中;
                for(int a = indexN ;a<arrayN.length;a++){
                    res[k]=arrayN[a];
                    k++;
                }
            }
            for(int a =0;a<k;a++){
               System.out.println(res[a]);
           }
    
    1. 最终输出结果如下:
    1,2,3,4,5,6,7,8,9,11
    

    问题二: 有一个service,该service中有两个synchronize方法,在controller中将该service注入,并在两个线程中执行分别调用这个service的不同方法,问:这两个方法该如何执行?
    解答:这两个方法会顺序执行;
    解释:synchronize为同步锁,该关键字修饰在方法上时表示对该对象加锁(对堆内该对象的地址加锁),且controller中不特殊说明,注入的service是单例的,所以在两个线程中分别调用该对象的不同方法时,只能有一个线程活的对象的锁,即同时只有一个线程可以执行;因此这两个方法虽然同时启动,但是只能顺序执行;

    展开全文
  • 数组合并在找工作中笔试和面试都是常遇到的问题,实际上这个主要可以分为两大类进行解决。第一类就是这两个数组都是有序的数组,第二类是这两个数组都是无需数组。...而对于两个有序数组合并的问...
  • packagecom.hudai..../*** 算法测试 合并两个有序数组到一个数组中**@authorWanHongLei*@version创建时间:2019年2月13日 上午11:14:13 类说明*/public classMergeTester {public static void main(String[] a...
  • 算法两个有序数组合并成一个有序数组 java语言

    万次阅读 多人点赞 2018-06-13 17:10:16
    题目:有两个有序数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。 思路:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置,  每次比较都是...
  • java 算法 1、递归的方法实现冒泡 1 public class SortTest { 2 public static void main(String[] args) { 3 int[] arr={12,5,16,3,9,0,158,214,85}; 4 queue(arr); 5 System.out.pr...
  • // 求两个有序数组合并后的上中位数。折半方法(二分查找),时间复杂度为O(logN),其中N是小数组的长度 // 中位数特性:1、数组一半不超过该值,一半不小于该值;2、从首尾各删除相同个数元素,中位数不变 ...
  • public classFindMedian {//求两个有序数组合并后的上中位数。折半方法(二分查找),时间复杂度为O(logN),其中N是小数组的长度//中位数特性:1、数组一半不超过该值,一半不小于该值;2、从首尾各删除相同个数元素,...
  • 归并算法有序数组合并算法实现一个简单的有序数组合并算法:写一个函数,传入 2 个有序的www.cppcns.com整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指...
  • packagecom.itheima.suanfa;importjavax.security.auth.kerberos.DelegationPermission;public class_03SingleLinkRemoveReport {public static voidmain(String[] args) {int[] num = {2, 2,2, 3, 3, 9, 11};...
  • 两个有序数组合并为一个有序数组

    千次阅读 2012-02-23 17:37:23
    两个有序数组合并为一个有序数组 突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵。   思想:先依次比较两个数组,按照小的就传入新 class ArraySort { ...
  • 前几天看见一道面试题中要将两个有序数组合并成一个新的有序数组,首先使用了嵌套循环,之后想那样效率太低,又想出了以下思路,和大家分享下,如果有更好的方法,请留言指教: 思路:1.新建一个数组大小为firArr和...
  • java实现归并算法

    2020-12-12 17:05:07
    /** 归并思想 将一个数组拆分一一个个小单元,然后逐个合并---两个有序数组合并 * ----------------原始数组--------------- * 2 1 4 5 6 7 3 2 * 每次合并后的结果 * 1 2 * 每次合并后的结果 * 4 5 * 每次...
  • java面试》15算法

    2019-02-23 14:30:39
    手写算法数组合并,栈实现堆 加密算法 自己实现lru算法 红黑树的实现原理和应用场景 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题) 两个有序数组的合并排序 一个...
  • 归并算法Java实现

    2017-03-01 12:24:27
    归并算法是分治思想的经典应用,其基本思想就是将两个有序的表合并成为一个有序表。 //实现将a、b两个数组合并到c数组 public void merge(int a[], int b[], int[] c) { int aIndex=0, bIndex=0, cIndex=0; ...
  • 1、两个有序数组合并成一个数组,要求合并后的数组依然是有序的 //python代码如下: li = [1,2,4,6,9] li2 = [3,4,7,14,16] li_com = [] i=0 j=0 while i<li.__len__() and j<li2.__len__(): if li[i]<...
  • Java实现归并排序算法

    2019-08-26 20:51:53
    个人看法,归并,就是通过递归的方法将数组合并以实现排序的功能。      首先我们拿最简单的一数组作为例子【3,2,1】。      我们通过递归将这数组平分,...
  • 它不断地将原数组分成大小相等的两个子数组(可能相差1),最终当划分的子数组大小为1时(下面代码第17行left小于right不成立时) ,将划分的有序数组合并成一个更大的有序数组。为什么是有序子数组???归并排序的...
  • 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治...治:将两个有序数组合并成一个有序数组。 ...
  • 1.3 两个有序序列的合并算法 32 1.3.1 算法描述与分析 32 1.3.2 程序实现 34 1.4 序列的划分 45 1.4.1 算法描述与分析 45 1.4.2 程序实现 46 1.5 小结 52 第2章 化整为零——分治算法 53 2.1 Hanoi塔问题与递归算法...

空空如也

空空如也

1 2 3
收藏数 48
精华内容 19
关键字:

java算法两个有序数组合并

java 订阅