zoukankan      html  css  js  c++  java
  • Java实现最长上升序列(结合优先队列等)

    package com.Long;
    
    import java.util.PriorityQueue;
    import java.util.Queue;
    import java.util.Random;
    
    
    class node implements Comparable<node>{
    	int val;
    	int Index;
    	@Override
    	public int compareTo(node arg0) {
    		if(this.val > arg0.val)return 1;
    		if(this.val < arg0.val)return -1;
    		return 0;
    	}
    }
    
    
    class Solution{
       
       private int arr[];
       private int maxLength[];
       private node data[];
       private Queue<node> pq;
       
       public boolean LongPath(){
        
    	   for(int i=1;i<arr.length;++i) {
    		   for(int j=0;j<i;++j) {
    			   if(arr[i]>arr[j]) {
    				   maxLength[i]=Math.max(maxLength[i],maxLength[j]+1);
    			   }
    		   }
    	   }
          return true;
      
       }
       public Solution(int Length) {
    	  arr=new int[Length];
    	  maxLength=new int[Length];
    	  data=new node[Length];
    	  pq=new PriorityQueue<node>(Length);
    	  Random r=new Random();
    	  for(int i=0;i<Length;++i) {
    		arr[i]=r.nextInt(10);
    		maxLength[i]=1;
    		node temp=new node();
    		data[i]=temp;
    	   }
        }
       public boolean printPath() {
    	   for(int i=0;i<arr.length;++i) {
    		 data[i].val=maxLength[i];
    		 data[i].Index=i;
    	   }
    	   return true;
       }
       public boolean pushQueue() {
    	   for(int i=0;i<arr.length-1;++i) {
    		   if(maxLength[i]<=maxLength[i+1]) {
    			   pq.add(data[i]);
    		   }
    		   else {
    			   pq.add(data[i]);
    			   while(!pq.isEmpty()) {
    				   System.out.println(pq.peek().Index+" "+pq.peek().val);
    				   pq.remove();
    			   }
    			   System.out.println();
    		   }
    	   }
    	   return true;
       }
    }
    
    
    
    public class Main {
       public static void main(String[] args) {
    	
    	  Solution space=new Solution(8);
    	  space.LongPath();
    	  space.printPath();
    	  space.pushQueue();
       }
    }
    

      

  • 相关阅读:
    codeblocks c++11 pthread
    腾讯笔试题目
    Unity3D协程介绍 以及 使用
    Unity手游之路<六>游戏摇杆之Easy Touch 3教程
    Unity3d 换装 之 模型动画分离
    Starling 2D框架简介(一)
    [译林军] 译~CrossBridge 简介
    Flash, Flex, Air, Flashplayer之间的相互关系是什么?
    网络和通信基础知识
    页游安全攻与防,SWF加密和隐藏密匙
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11622359.html
Copyright © 2011-2022 走看看