随笔分类 - 算法
摘要:题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:count为1的位数,初始为零每次右移一为,与1做与运算,结果不为零说明最后一位为1c++代码如下int numberofone(int n){ while (n){ if (n & 1) count++; ...
阅读全文
摘要:题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。初次看题觉得这题好简单,直接用库函数power()不就行了,仔细想了想,万一不让用库函数呢于是就自己实现了一个power()函数,愚笨的脑子只考虑了一下几点1:base == 0,直...
阅读全文
摘要:题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。(测试用例中,"树"的输出形式类似于树的...
阅读全文
摘要:题目描述众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次。最常使用的有三种遍历的方式:1.前序遍历:若二叉树为空,则空操作;否则先访问根结点,接着前序遍历左子树,最后再前序遍历右子树。2.中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接...
阅读全文
摘要:题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。设数组为rotateArray方法1:逐个遍历算法复杂度O(n)方法2:二分查找很...
阅读全文
摘要:题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。设两个栈为stack1,stack2;1:首先想到最简单的方法:是入栈时将数据压入stack1,出栈时将stack1中的元素出栈压入stack2,在将stack2栈顶元素弹出,再将stack2中的剩余元素重新...
阅读全文
摘要:括号的匹配括号的匹配问题简单的分析一下可以用的括号可以分为以下几种"()""[]""{}"""匹配过程中又以下四种情况左右括号乱序左括号比右括号多右括号比左括号多匹配算法思路定义一个栈,根据栈后进先出的特性进行括号匹配依次读入一个字符当这个字符是左括号时,将其压入栈顶重复第二步,如果字符时右括号将栈...
阅读全文
摘要:一个约瑟夫环问题问题开始: 罗马人攻占了乔塔帕特,41个人藏在一个山洞躲过了这场浩劫。这41个人中,包括历史学家Josephus(约瑟夫)和特的一个朋友。剩余的39个人为了表示不向罗马人屈服,决定集体自杀。大家决定了一个自杀方案,所有这41个人围成一个圆圈,由第一个人开始顺时针报数,每报数为3的人就...
阅读全文
摘要:折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果xa[n/2],则我们只要在数组a的右 半部继续搜...
阅读全文
摘要:动态规划解矩阵连乘动态规划的基本要素1:最有子结构2:重叠子问题动态规划适用于解最优化问题,通常有四个步骤(1) 找出最优解的性质,并刻画其结构性质。(2) 递归的定义最优质(3) 以自底向上的方式计算出最优质(4) 根据计算最优质时得到的信息,构造最优解我们以矩阵连乘为例。{A1,A2,......
阅读全文