①算法之队列解QQ密码

本应该排序是应该算法最先学的,不过既然是记录我就只记录自己难点的地方了。算法书籍很多,不过我不喜欢经典,经典之所以成为经典,是需要多看几遍的,不过《啊哈算法》这本书还是适合入门小菜鸟学的。我也是小菜鸟。


算法大部分是C写的,对于自己一直在用java写程序员的人,倒是有点不习惯,书中的是用C写的,我就用java自己再写一遍呗,深刻理解一下。


内容来自 《啊哈算法》

题目:

新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~) ,小哼向小哈询问 QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第 1个数删除,紧接着将第 2 个数放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第 5 个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的 QQ啦。 现在你来帮帮小哼吧。 小哈给小哼加密过的一串数是 “6 3 1 7 5 8 9 2 4” 。


解题思路:不用想数组是肯定有了,首先在算法习惯设计头和尾进行标记,分别是head 和tail。删除即是在首+1 交换即是个尾交换 尾+1 首也+1  直到首>=尾结束循环

①算法之队列解QQ密码_第1张图片


算法实现:

package queue;

public class QueueDemo {

	public static void main(String[] args) {
		int q[] = new int[23];
		// 6 1 5 9 4 7 2 8 3
		q[0] = 0;
		q[1] = 6;
		q[2] = 3;
		q[3] = 1;
		q[4] = 7;
		q[5] = 5;
		q[6] = 8;
		q[7] = 9;
		q[8] = 2;
		q[9] = 4;
		int head, tail, i;
		// 初始化队列
		head = 1;
		tail = 10;
		while (head < tail) {// 当队列不为空的时候执行循环
			System.out.println(q[head]);
			head++;
			q[tail] = q[head];
			tail++;
			head++;
		}
		for (int j = head; j < tail; j++) {
			System.out.println(q[j]);

		}
	}
}


你可能感兴趣的:(走向Android中级之路)