数据结构+算法
qojnbbqtg
这个作者很懒,什么都没留下…
展开
-
40亿不重复的正整数,如何判断一个数是否在其中
int型的表示范围为 -2^32~2^32-1 ,也就是40亿多点。如果只是找一个数在不在其中,则可以直接遍历一次,这是最快速的方法。如果要是判断多个数是否在其中,则遍历多次效率就很低了,首先4*10^9 bit 约等于512M字节,因此首先可以在内存中开512M的空间,创建一个数组a,遍历一次40亿个数,将数组下标为这个数的位置1,如遍历到2000000111这个数,则直接将a[20...原创 2012-02-08 17:42:35 · 975 阅读 · 0 评论 -
算法集
1:不用API,计算power(m, n)要求复杂度在logn解:n个数相乘,复杂度是n,而logn是典型的折半思维,因此要想办法使每次计算次数减半,在while循环内,求n/2个m^2的和->求n/2/2个m^2^2的和->...pseudo code: [code="java"]long result = 1L;while(n!=1){ if(n & 1 == 1){...原创 2014-06-05 19:58:49 · 116 阅读 · 0 评论 -
求N个数据的最大公约数和最小公倍数
gcd: greatest common divisor 最大公约数lcm: least common multiplier 最小公倍数如果是N=2的话,求gcd:loop:if a > b: temp = a % b if temp == 0: gcd = b a = b b = tempelse: ....原创 2013-08-15 10:19:18 · 118 阅读 · 0 评论 -
不用中间变量交换a b的值及完数
一:不用中间变量交换a b值。分析:a=a+b; #将a b的和赋值给ab=a-b; #a的值已经发生变化,并且保存了和值,因此这里要只能对b进行求值,不能改变a的值。a=a-b; #同理求得a值。另一种解法:a=a^bb=a^ba=a^b^ 异域: a^b === a & ~b完数:一个数的所有因子(不包括自身)相加等于自身,则该数就是完数...原创 2013-08-08 10:55:38 · 235 阅读 · 0 评论 -
用小白鼠试验毒水问题
问题一:8瓶水,其中一瓶有毒,问要找出有毒的水,你至少要尝试几次?(前提是毒不死人的)问题二:还是这个题目,另外提供一群小白鼠,现在要你同时给N只小白鼠喝水,问至少需要几只小白鼠能一次性找出毒水?问题一比较简单,二分法,假设瓶子编号依次为0 1 2 3 4 5 6 7,先等分成2份,然后从其中一份中取出点水混合下,喝,有问题则毒水在这份中,没问题则毒水在另一份中,然后再二分,这样只需要...原创 2013-08-01 17:59:31 · 1152 阅读 · 0 评论 -
打印出一个字符串的全排列(重复的只计算一次)
给定hello则它的全排列共有 5*4*3*2*1/ (2*1)=60种。思想(先不考虑去重复):首先取第一个字符如h,然后计算剩下4个字符ello的全排列,然后再将h和这些全排列相加就OK了,然后再取第二个... 第三个...,典型的循环+递归思想。如果要去重,可以考虑先将整个字符串排序,hello -> ehllo,在循环的时候,首先判断当前字符和前一个字符是否相同,如果相同则...原创 2013-08-01 16:55:35 · 212 阅读 · 0 评论 -
左旋转一个字符串,时间复杂度O(n),空间复杂度O(1)
题目和解答思路均来自网络, thank the internet.---------------割---------------------------------给定一个字符串, a = new int[N];,要求将前K个字符移到a的后K个位置,如:123456,左旋转2位变成345612,要求时间复杂度是O(N),辅助空间是O(1)。这题最简单的做法是:先开一个K长度的临...原创 2013-07-26 14:41:52 · 261 阅读 · 0 评论 -
腾讯面试题:第一行数字0 1 2...9,第二行数字分别是第一行数字在下面出现的次数?...
题目:0 1 2 3 4 5 6 7 8 9_ _ _ _ _ _ _ _ _ _要求在横线上填入数字,使得每个数字分别是上面对应数字在下面出现的次数分析: 设下面数字分别为 n0 n1 n2 n3...n9,表示对应数字出现的次数则n0 + n1 + n2+...+n9 = 10 A式 (次数和==横线的个数)1*n1 + 2*n2 + 3*n3+......原创 2013-07-19 13:23:14 · 2635 阅读 · 1 评论 -
单向链表的删除和反转
今天部门测试,两道题:1:删除一个单向链表中值为某个特定值的所有节点2:把一个单向链表反转第一个题目比较简单,第二个题目有点难,我吭哧半天没搞出来,丢人。。。写在卷面上的答案要是搬到计算机上,100%得不到正确结果,呃,太依赖调试了。。。Node类:[code="java"]/** * chega * 2012-12-5下午2:55:52 */...原创 2012-12-05 16:12:35 · 148 阅读 · 0 评论 -
算法小题目
一:求GCG(greatest common divisor)analysis: tow nonnegative integer p and q, if q is 0 then gcd is q, then the gcd is the greatest common divisor of q and p%q. q和p%q的最大公约数,当然也是p和q的最大公约数。[code="java"]...原创 2012-11-29 11:17:25 · 78 阅读 · 0 评论 -
判断素数
[code="java"]public class Prime { private static int MAX = 10000000; private int[] isPrime = new int[MAX]; private void prime(){ for(int i=0;i原创 2012-03-26 00:27:03 · 81 阅读 · 0 评论 -
HanoiTower解决思想
[code="java"]public static void main(String...args){ HanoiTower hanoi = new HanoiTower(); hanoi.move("A","B","C",new int[]{3,2,1}); } private void move(String A, String B, String C,int[...原创 2012-02-22 19:44:26 · 73 阅读 · 0 评论 -
给出一串数字,算出所有组合值
[code="java"]public class AllOrderWithinNumbers { public static void main(String...args){ int[] i = new int[]{1,2,4,5}; AllOrderWithinNumbers t = new AllOrderWithinNumbers(); ArrayList ...原创 2011-12-11 01:01:56 · 449 阅读 · 0 评论 -
求A B C三个数组成集合的幂集
幂集是指一个可数集合的子集(包含空集和全集)所组成的全部集合,如本题中的{A,B,C}的幂集是{} {A} {B} {C} {A ,B} {A,C}{B,C} {A,B,C}。如果一个集合中的元素个数是k的话,则幂集个数2^k。这题可以简单的用二进制解决, 000 {}001 {C}010 {B}011 {B,C}。。。111 {A,B,C} 一共8个...原创 2012-02-08 17:54:37 · 1381 阅读 · 0 评论 -
一个骰子6个面,怎么扔能使7个事件均匀分布
一个骰子6面均匀,现有7个互斥事件,至少扔多少次可以使这7个事件等概率发生扔一次是不可能的,如果扔两次,则可以得到36个不同的数(设第一次数是x,第二次是y,则(x-1)*6+y)是1-36的数,连续没重复的。 然后去掉36,1-35 mod 7 这样就可以使这7个事件均匀分布了,如果两次扔的都是6 6的话,重扔。通用公式:6^n mod 事件数 == 0 其中n为要扔的次数,但有...原创 2012-02-08 17:47:42 · 1943 阅读 · 0 评论 -
全排列
[code="java"]/** * 全排列,没有重复元素 * @author gche * 思想:如求abc的全排列,可先求bc的全排列,bc,cb,然后分别和a进行组合成结果:abc,bac,bca,acb,cab,cba */public class Arrange { @Test public void test(){ String data ...原创 2016-03-18 16:39:41 · 99 阅读 · 0 评论