扑克牌的顺序问题

   1. 问题描述: 

      我手中有一堆扑克牌, 但是观众不知道它的顺序。

             第一步, 我从牌顶拿出一张牌, 放到桌子上。

             第二步, 我从牌顶再拿一张牌, 放在手上牌的底部。

             第三步, 重复前两步的操作, 直到我手中所有的牌都放到了桌子上。

最后, 观众可以看到桌子上牌的顺序是:13,12,11,10,9,8,7,6,5,4,3,2,1

如果给出桌子上的牌的顺序(从上往下看),  请问, 我刚开始拿在手里的牌的顺序是什么?

            请用一个完整的函数来实现这一过程。

2.算法解读

 这个题的核心点在于:      

            我从牌顶拿出一张牌, 放到桌子上。

            我从牌顶再拿一张牌, 放在手上牌的底部。

           重复。

使用逆向思维:

           从手上最底部拿出一张牌放在最顶部。

          从桌子上最顶部拿出一张牌放在手上最顶部。

          重复。

3.代码实现

实现代码如下(包括正向与逆向):

    

public static void main( String[] args ){
    	//int data1[]={1,2,3,4};
    int data1[]={1,12,2,8,3,11,4,9,5,13,6,10,7};
    
    
    //正向
    for(int de:findSortPositive(data1)){
    		System.out.print(de+" ");
    }
    System.out.println();
    //逆向 
    for(int data:findSortInverted(findSortPositive(data1))){
    	System.out.print(data+" ");
    }	
    }
    
    public static int[] findSortPositive(int[] data){
    	int [] temp=new int[data.length];
    	Deque deque=new LinkedList();
    	for(int oneData:data){
    		deque.addLast(oneData);
    	}
    	for(int i=0;i deque1=new LinkedList();
    	Deque deque=new LinkedList();
    	for(int oneData:data){
    		deque.addLast(oneData);
    	}
    	for(int i=0;i

 这里使用双端队列实现比较简单,也容易懂,也可以利用数组实现,数组实现代码略

 

      

  

 

 

 

你可能感兴趣的:(算法,面试,算法,扑克牌排序,面试)