请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

猿媛之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 6019|回复: 0

如何把三个有序数组合并成一个有序数组

[复制链接]

44

主题

48

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2015-12-25 21:44:18 | 显示全部楼层 |阅读模式
  1. import java.util.PriorityQueue;

  2. class ArrayNode implements Comparable<ArrayNode>
  3. {
  4.         private int arr[];
  5.         private int index;

  6.         public ArrayNode(int arr[], int index)
  7.         {
  8.                 this.arr = arr;
  9.                 this.index = index;
  10.         }

  11.         public int compareTo(ArrayNode arr)
  12.         {
  13.                 if (this.arr[this.index] == arr.arr[arr.index])
  14.                         return 0;
  15.                 else if (this.arr[this.index] < arr.arr[arr.index])
  16.                         return -1;
  17.                 else
  18.                         return 1;
  19.         }

  20.         public int[] getArr()
  21.         {
  22.                 return arr;
  23.         }

  24.         public int getIndex()
  25.         {
  26.                 return index;
  27.         }
  28.         
  29.         public boolean empty()
  30.         {
  31.                 return arr.length-1==index;
  32.         }
  33.         
  34. }
  35. public class Test
  36. {
  37.         public static int[] mergeArrays(int[][] arr)
  38.         {
  39.                 if(arr==null |arr.length==0)
  40.                         return null;
  41.                 PriorityQueue<ArrayNode> queue = new PriorityQueue<ArrayNode>();
  42.                 int count=0;

  43.                 for(int[] i: arr)
  44.                 {
  45.                         queue.add(new ArrayNode(i,0));
  46.                         count+=i.length;
  47.                 }
  48.                
  49.                 int result[] = new int[count];
  50.                 int resultIndex=0;
  51.                
  52.                 while(!queue.isEmpty())
  53.                 {
  54.                         ArrayNode an = queue.poll();
  55.                         result[resultIndex++]=an.getArr()[an.getIndex()];
  56.                         if(!an.empty())
  57.                                 queue.add(new ArrayNode(an.getArr(), an.getIndex()+1));
  58.                 }
  59.                 return result;
  60.         }

  61.         public static void main(String[] args) {
  62.                 int[] arr1 = { 1, 5, 9 };
  63.                 int[] arr2 = { 2, 6, 10 };
  64.                 int[] arr3 = { -1, 3, 7, 12 };
  65.                 int[] arr[] = new int[][] { arr1, arr2, arr3 };
  66.                 int[] result = mergeArrays(arr);
  67.                 for(int i:result)
  68.                         System.out.print(i+" ");
  69.         }
  70. }
复制代码


查看更多请关注微信公众号:猿媛之家


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|猿媛之家    

GMT+8, 2021-10-25 10:13 , Processed in 0.182303 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表