啊哈算法java实现

解密QQ号--队列

2018-04-19  本文已影响17人  Airycode

解密QQ号的规则是:先将第一个数删除,紧接着将第二个数放到这串数字的末尾,知道剩下最后一个数字,将最后一个数字也删除,把删除的数字链接起来就是QQ号。
尝试编程思路:
首先需要一个数组来存储这串数字,解密的第一步就是怎么讲第一个数删除,在数组中删除一个元素就是把后面的元素往前面挪动一位,将前面的数字覆盖掉。补上之前的空位,但是这样会很好费时间,在这里我们引入两个变量head和tail,head用来记录队列的队首(即第一位),tail记录队列的队尾(即最后一位)的下一个位置。tail为什么记录队尾的下一个位置而不是队尾,这是因为队列中只剩下一个元素的时候,队首和队尾重合会带来一些麻烦,我们规定队首和队尾重合的时候,队列为空。
现在有9个数,9个数全部放入队列之后head=1;tail=10;此时head和tail之间的数就是目前队列中“有效”的数,如果删除一个数的话就head++。这样做虽然浪费了空间,但是节省了大量的时间。新添加一个数就q[tail] = x ;tail++;
代码实现:

import java.util.Scanner;


public class MyQueue {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int [] arr = new int[102];//开辟的数组空间
        for (int i=1;i<10;i++) {
            arr[i] = input.nextInt();
        }
        
        int head = 1;
        int tail = 10;//目前数组中
        while (head < tail) {//当队列不为空的时候循环
            //打印队首
            System.out.print(arr[head]+" ");
            head++;//出队
            //先将新的队首数据添加到队列的末尾
            arr[tail] = arr[head];
            tail++;
            //再讲队首出队
            head++;
        }
        
        
        
        
    }
    
}

运行结果:


image.png
上一篇 下一篇

猜你喜欢

热点阅读