摘要: 引言 一般这种不能用四则运算的题都只有用位运算来做,目的是加强大家对计算机计算的理解,真是有点扯淡呢 解决问题 首先我们得思考计算机是怎样做加法的呢,比如3加4,如果转换成二进制是0011和0100,加起来是7,也就是0111,相当于是两个二进制的异或运算 但是我们再举一个例子就是4加4,会发现,两个二进制是0100和0100,异或运算的话结果为0000,但是我... 阅读全文
posted @ 2015-05-03 19:50 keedor 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 引言 常见的约瑟夫环问题有用循环链表做的,有用数组做的,这里提供一个用数学公式做的,由此可见,很多计算机的问题如果最终用到数学的知识,时间复杂度会大大的降低 分析问题 首先我们对0到n-1删除第一个数进行分析,第一个被删除的数一定是序号为m-1的数,因为0号数了1,1号数了2,m-1号数了m,那么应该删掉m-1号,设m-1号是第k号,这里这样做是因为后面可以扩展,想扩展为m... 阅读全文
posted @ 2015-05-03 19:38 keedor 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 分析问题 这个题目的关键点在于大小王可以看作任意的数字,那么我们就把这个任意的数字看作0也未尝不可,因为扑克牌中1-15都有数字,所以可以用0代表大小王 这样我们就将问题转换成了从0-15中抽5个数字,看是否连续的问题,由于0可以看作任意数字,所以我们可以用0去补那些空缺的数,比如0,1,3也算是连续的 要记住关键点还是这个任意数字上,考虑一个问题,就是如果这5... 阅读全文
posted @ 2015-05-03 19:11 keedor 阅读(707) 评论(0) 推荐(0) 编辑
摘要: 问题 n个骰子朝上的数之和为s,求s的所有可能以及概率 分析问题 如果是用笨方法,一般人最开始都会想到笨方法,那就是枚举法 举个例子,比如两个骰子,第一个骰子的结果为1,2,3,4,5,6,两个骰子的结果是2,3,4,5,6,7;3,4,5,6,7,8;4,5,6,7,8,9;……7,8,9,10,11,12,共三十六种,用n平方size的数组记录这36个结果 ... 阅读全文
posted @ 2015-05-03 18:52 keedor 阅读(1606) 评论(0) 推荐(0) 编辑
摘要: 总结 这两个东西一个很重要的区别是Hashtable是线程安全的,而HashMap是线程不安全的。 HashMap要实现同步则要通过额外的同步机制:一般Collections的一个静态方法得到解决:Map m = Collections.synchronizedMap(new HashMap(.... 阅读全文
posted @ 2015-05-03 11:06 keedor 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 总结 首先它们的底层实现不同,Arraylist和vector都是基于数组实现的,而Linkedlist是基于链表实现的 另外虽然vector和arraylist都同样是基于数组实现的,但vector的源码中有很多synchronized方法,说明是线程安全的,同步的,而Arraylist是线程不... 阅读全文
posted @ 2015-05-03 10:39 keedor 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 引言 这种翻转的问题会遇到很多,其实就是一个倒序的问题,对于第一个题只是想翻转单词的顺序,而并不想把整个字符串翻转了,如果完全翻转的话,比如I am a student.中所有字符翻转得到.tneduts a ma I。显然不符合要求,但已经很接近答案了,仔细观察可以发现,我们离最终答案只差一步,... 阅读全文
posted @ 2015-05-03 10:30 keedor 阅读(1265) 评论(0) 推荐(0) 编辑
摘要: 引言 第一问题很简单,leetcode上也有相应的题,2Sum问题,leetcode上还有2Sum的进阶版3Sum,只是在这个问题上增加了一层循环而已,另外还有3Sum_Close问题,就是和接近s的三个数,本文将依次介绍2Sum问题,3Sum问题,以及3Sum_close,以及一串连续数问题 对... 阅读全文
posted @ 2015-05-03 10:00 keedor 阅读(270) 评论(0) 推荐(0) 编辑