随笔分类 - 小算法
摘要:给出一个正整数n,求1到n的最大奇约数之和。思路观察1,2,3,4,5,6,7,8他们的最大奇约数为1,1,1,3,1,5,3,7,1.规律:奇数的最大奇约数是其自身偶数的最大奇约数是其一直除以二得到的首个奇数方法:挑出n中所有奇数,求和。对于剩下的偶数,除以2,再挑出其中的所有奇数求和。一直重复直到只剩1。记结果为f(n),f(n) = 小于等于n的所有奇数之和加上f(n/2)。程序long l...
阅读全文
摘要:题目有一种编码的编码范围是a~y的25个字母,从1位到4位的编码,从1位到4位的编码,如果把该编码按照字典序排序,形成一个数组如下a,aa,aaa,aaab,...b,ba,baa,baaa,baab,...,yyyw,yyyx,yyyy其中a的Index为0.要求求某个编码的Index。输入:baca输出:16331分析如上图,把编码树画出来,确定每一层节点的子树的节点数,逐层往下走,叠加编码...
阅读全文
摘要:问题描述:对于给定的一组改路,构造一个期望搜索代价最小的二叉查找树。《算法导论》第二版213页。源程序:#include #include using namespace std;#define KEY_NUMBER 5#define INFINITY 1000//期望搜索代价,只使用1<=i<=n+1,0<=j<=n的表项// 其中expected_cost[i,i-1]表示i为根的搜索树的期望...
阅读全文
摘要:题目小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:while(!Q.empty()) //队列不空,执行循环 { int x=Q.front(); //取出当前队头的值x Q.pop(); //弹出当前队头 Q.push(x);...
阅读全文
摘要:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起...
阅读全文
摘要:case1一个整形数组中除了一个数字之外,其他数字都出现了两次,请找出这个数。要求时间复杂度O(n),空间复杂度O(1).思路:关键词:一次,两次。出现两次会带来什么效果?联想到异或,一个数与自身异或结果为零。解法:将数组中所有的数异或起来,出现两次的数相互抵消,最后的结果就是只出现一次的数。case2一个整形数组中除了两个数字之外,其他数字都出现了两次,请找出这个数。要求时间复杂度O(n),空间...
阅读全文

浙公网安备 33010602011771号