随笔分类 - 面试题
摘要:背包问题目前有两种常规解放:递归方法和动态规划法1.动态规划方法转自:http://blog.sina.com.cn/s/blog_6dcd26b301013810.html动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描述一个最优解的结构,寻找子问题,对问题进行划分。2. 定义状态。往往将和子问题相关的各个变量的一组取值定义为一个状态。某个状态的值就是这个子问题的解(若有k个变量,一般用K维的数组
阅读全文
摘要:最近一段时间学习了python,发现python真是个强大,强大到和Matlab相媲美。为了熟悉python,将之前的各种排序算法用python实现了一下。常用的时间复杂度为O(n^2)的排序算法有冒泡排序,插入排序和选择排序,时间复杂度为O(nlog2(n))的算法有快速排序,归并排序和堆排序,这里的快速排序的初始比较值partition是随机给定的,在用python进行编写时能更清楚的理解整个排序算法的过程。 1 import random 2 def BubbleSort(num): 3 n=len(num) 4 for i in range(0,n): 5 ...
阅读全文
摘要:题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11 输出8 6 10 5 7 9 11。思路:广度优先遍历#include <iostream>#include <deque>using namespace std;struct BTree{ BTree* pLeft; BTree* pRight; int value;};void InsertBTree(BTree* &pRoot, int val){ if (!pRoot) { pRoot=new B...
阅读全文
摘要:1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。答:[cpp]· int func(unsigned int n)· {· if(n == 1)· return 0;· if(n %
阅读全文
摘要:问题描述:(百度面试题)搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为0-255字节。假设目前有1000万个记录,除去重复后,不超过300万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门,请你统计最热门的10个查询串,要求内存不能超过1G。问题解析:【分析】:要统计最热门查询,首先就是要统计每个query出现的次数,然后根据统计结果,找出Top 10。所以我们可以根据该思路分两步来设计该算法。第一步:Query统计(算法一)直接排序法首先我们能想到的就是排序,首先对这个日志里面的所有Query进行排序,然后再遍历排好序的Query,统计每个Q
阅读全文
摘要:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12 和10, 5, 7。思路:1、当访问到某一节点时,把该结点的值添加到当前和变量,且把该结点压入栈中。2、若结点为叶子结点,且当前和变量==期望的和,则打印栈中的结点值,即为所需的路径。3、若结点不是叶子结点,继续访问它的左孩子结点,访问它的右孩子结点。4、删除该结点。包括从当前和变量中减去结点值,从栈中...
阅读全文

浙公网安备 33010602011771号