自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(386)
  • 资源 (3)
  • 收藏
  • 关注

翻译 用二叉链表实现完全二叉树 (Linked Complete Binary Tree) 的实现(一)

用二叉链表实现完全二叉树 (Linked Complete Binary Tree) 的实现(二)用二叉链表实现完全二叉树 (Linked Complete Binary Tree) 通常情况下,我们是用数组来实现完全二叉树的。如果parent node的下标是 i,那么左孩子、右孩子的下标分别是 2*i+1、2*i+2。但是这篇文章将介绍如何用二叉链表实现完全二叉树。Ho

2013-02-22 01:26:23 1044

原创 找到二叉树的Ceil值

给你一个二叉树和一个数值,找出二叉树中比这个数值大的最小的值(也就是所谓的Ceil值)。代码如下:#include #include /* A binary tree Node has key, left child and right child */struct Node{ int key; Node* left; Node* right;

2013-02-22 01:07:02 614

原创 把二叉搜索树变成一个二叉树,使得原来每个节点的值 变成 (原来的值+所有大于它的值的和)

Given a Binary Search Tree (BST), convert it to a Binary Tree such that every key of the original BST is changed to key plus sum of all greater keys in BST.Examples:Input: Root of following BST

2013-02-21 14:47:38 539

原创 线索二叉树 Threaded Binary Tree (不用递归,不用栈,遍历二叉树)

线索二叉树 Threaded Binary Tree不用递归,不用栈,遍历二叉树Using Morris Traversal, we can traverse the tree without using stack and recursion. The idea of Morris Traversal is based on Threaded Binary Tree. In

2013-02-21 13:08:08 661

原创 压缩字符串

给你一个字符串,比如 “AAABBBCDEEFFF”,把这个字符串变成 "A3B3CDE2F3",达到压缩的目的。用in-place的方式进行压缩,代码如下:#include using namespace std;void compress(char* str){ char prev = *str; // used to decide whether *curr is an u

2013-02-21 10:18:42 519

原创 Independent Set 独立集问题

和独立集相关的一些图论的概念如下:Independent Set 独立集问题Bipartite Graph 二分图Dominant Set 主导集Cycle Graph循环图问题:给你一个二叉树,求出该二叉树的最大独立集。思路:二叉树问题可以用递归的办法来解决,这个也不例外。更好的是,这个问题还可以用动态规划的方法来解决。设二叉树的根节点是root,那么,此二叉树的最大

2013-02-20 10:20:32 7688

翻译 java:reference C++:pointer

In C++, object variables hold object values. This is different from Java, where an object variable only is a reference to an object value that is stored elsewhere. There are circumstances where the sa

2013-02-16 06:51:23 726

原创 二叉搜索树的插入

如何向二叉搜索树插入节点,如何判断一个二叉树是合法的二叉搜索树?

2013-02-15 02:00:46 386

原创 [LeetCode] Reverse Linked List 翻转链表

给你一个单链表,写一段代码,翻转该链表。代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class So...

2013-02-15 01:43:24 467

转载 smart pointer / shared pointer / normal pointer

smart pointer / shared pointer / normal pointer文章来源:http://stackoverflow.com/questions/417481/pointers-smart-pointers-or-shared-pointersI am programming with normal pointers, but I have heard

2013-02-07 01:29:10 588

原创 改二叉树为链表,使每个节点指向其中序遍历的下个节点

改二叉树为链表,使每个节点指向其中序遍历的下个节点用递归的方法。(以下代码已经过测试)struct node *btree2list(struct node *tree) { struct node *right; struct node *left; struct node *list=NULL; struct node *tmp; if(tree) { right =

2013-02-06 15:07:40 519

原创 加油站-汽车问题

给定两个数列 P 和 D。P[i] 代表第 i 个加油站的油量,D[i] 代表从当前加油站到下一个加油站的距离。汽车每走单位距离,就会消耗单位油量。注意:加油站是环形单链表状的分布,也就是说,从当前加油站只能沿着一条仅有的路去向下一个加油站。求一个起始加油站,从这个加油站出发,可以遍历所有加油站。思路:通过 arr[i] = D[i] - P[i] 得到一个新的数组。用Kadane算法找出

2013-02-06 14:41:14 992

原创 最大和的子数组 Maximum subarray problem

最大和的子数组 Maximum subarray problem给定一个数组,找到一个连续的子数组,使得这个子数组的和最大。这里给出Kadane算法,复杂度是O(n)。def max_subarray(A): max_ending_here = max_so_far = 0 for x in A: max_ending_here = max(0, m

2013-02-06 14:13:42 800

转载 MVC的利与弊

原文:MVC pattern pros and consMVC pattern pros and consMonday, May 7, 2007 2:47:53 AMPHP, programmingIn this post I'll talk about some of the pros and cons of the MVC (model-view-con

2013-02-06 13:42:19 519

原创 将一个无空格的句子分词

给定一个无空格的句子,如“thereisastoneontheroad”,和一个能判断一个字符串是否是合法单词的函数isWord(char*start, char*end)。要求把这个句子分词,即,输出结果是"there is a stone on the road"。思路:用递归/回溯的方法进行解决。代码如下:#include "stdlib.h"#include "stdio

2013-02-06 11:51:38 2293

原创 一个数组由2n个整数组成,把这个数组分成两半,各有n个整数,求一个分法,使这两个子数组和的差最小

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如:   var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];可以用动态规划来解决这个问题。代码如下:#include #include #include #inclu

2013-02-02 06:44:13 5679

原创 [LeetCode] 找到第一个不存在的正整数 First Missing Positive

给定一个未排序的整数数组,找到最小的且不存在于该数组的正整数。例如,[-1, 2, 4, 3]中,1是最小的且不存在于该数组的正整数。思路:对于数组中的每一个元素arr[i],如果 0 最后,对数组 arr 重新扫描一边,如果 arr[i] != i+1, i+1 就是所求的正整数。代码如下:#include using namespace std;int solve

2013-02-02 06:08:13 1332

原创 直方图最大矩形问题(Largest Rectangle in Histogram)

有n个非负整数,代表直方图中每个bar的高度,每个bar的宽度是1。找到此直方图中面积最大的矩形。 6 5 ___ ___| | | | | 3 2 | | | 2 ___ ___ 1 | | |___| | | |__

2013-02-02 05:08:15 4492 1

原创 火车运煤问题

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?思路:1.火车先拉1000吨煤,走250公里,卸下500吨煤,再返回矿区。2.再装满1000吨煤,走250公里,装上25

2013-02-01 07:39:53 860

原创 子数组和问题,和被元素个数整除

类似问题:子数组和被10整除。给你一个数组,要求找出一个子数组,使得该子数组的和可以被整个数组的元素个数整除。例如,下面的数组有10个元素,子数组A[3]+A[4]+A[9] mod 10 = 0.思路:设prefix_sum[j] = ( A[0] + A[1] + ...  + A[j] ) mod n. 其中,n是A中元素的个数。那么case1:prefix_

2013-01-31 03:55:12 2227

原创 子数组和问题,和被10整除

类似问题:子数组和被所有元素的个数整除。给你一个数组,要求找出一个子数组,使得该子数组的和可以被10整除。例如,下面的数组中,子数组A[3]+A[4]+A[9] mod 10 = 0.思路:用动态规划。状态空间定义如下:s(m,k)表示数组A的前m个元素中,是否存在一个子数组,该子数组的和除以10得到的余数是k。s(m,k)=true表示存在;s(m,k)=false表示不

2013-01-31 03:46:53 1750

原创 惰性初始模式 Lazy Initialization

惰性初始模式 Lazy Initializationwiki百科释义你的代码要分配一个boolean的数组,分配内存所用时间复杂度是O(1),但是分配完后,数组的内容是任意值。已知,数组很大,我们不希望用遍历的方式初始化该数组,而是采用惰性初始化模式。问题:Design a deterministic scheme by which reads and writes to an u

2013-01-30 14:27:10 1439

原创 [LeetCode] 荷兰国旗问题 Sort Colors

类似问题:单链表快速排序Write a function that takes an array A and a beginning indexbeginand an ending index end into A, and rearranges the elements such that all elements less than A[begin] appear first, foll

2013-01-30 13:30:38 1399

原创 全面整理的C++面试题(II)

1. 指针和引用有什么区别?A pointer can be re-assigned any number of times while a reference can not be reassigned after initialization.A pointer can point to NULL while reference can never point to NULLYou

2013-01-28 13:55:26 473

原创 进程间通信的方式

详见:Advanced Linux Programming Chapter 5 Interprocess Communication,by Mark Mitchell, Jeffrey Oldham, and Alex Samuel. 3.4  进程通信3.4.1共享内存      在相互通信的进程之间设有一个公共内存区,一组进程向该公内存中写,另一组进程从化共内存中读,通过这种方

2013-01-27 14:53:05 1449

原创 全面整理的C++面试题(I)

1. 是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?virtual修饰符会被隐形继承的。virtual可加可不加子类覆盖它的函数不加virtual ,也能实现多态。2. 请简单描述Windows内存管理的方法。当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的

2013-01-27 12:42:44 742

原创 15数码问题

15数码问题1878年,美国最伟大的谜题专家"Sam Loyd发明了15数码谜题。这个谜题由一个正方形盒子和15个编号为1,2,...,15的正方形滑块组成,每个滑块的边长是盒子边长的1/4,因此可以把它们拼成如下面左图所示的形式,留下一个空格。每次可以把任何一个与空格相邻的滑块移动到空格中(因此在左图中可以把滑块12和15移动到空格中),而此滑块原来的位置变成新的空格。左图和右图非常接近,那

2013-01-27 10:55:05 6775

原创 数字三角形II

有一个由正整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数,如下图所示。从第一行的数开始,除了某一次可以走到下一行的任意位置外,每次都只能左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来。如何走,使得这个和尽量大?注意:此题说到,除了某一次,意思是,有可能是第一次,还可能是第二次,第三次...。如果没有“除了某一次可以走到下一行的任意

2013-01-27 02:01:41 1394

原创 数字三角形III

本问题的相关问题:数字三角形II有一个由正整数组成的三角形,第一行只有一个数,除了最下行之 外每个数的左下方和右下方各有一个数,如下图所示。从第一行的数开始,每次都只能左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来。如何走,使得这个和的个位数尽量大?在本例中,记d[i,j,k]表示以格子(i,j)为根的子三角形是否存在所有数之和个位为k的路径,则d[i,j,k]

2013-01-26 12:39:15 1128

原创 动态规划的思想

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子

2013-01-26 11:59:03 606

转载 回溯法的思想

转自:百度知道回溯法又称试探法。回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。当我们遇到某一类问题时,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题

2013-01-26 11:50:02 1009

原创 快速选择(quick select) + 线性时间选择(linear-time select) - 求出n个数中第k大的数

利用快速排序中partition函数,很容易求出n个数中第k大的数,因此在划分后如下图。左半(包括q)有j = q - p + 1个元素。如果k j,需要在右半找第k - j大元素。可以证明,期望时间复杂度为O(n)。int partition ( int p , int q){ int x = a[p], i = p; for(j = p +1; j <= q;

2013-01-26 06:48:47 9277

原创 矩阵乘法-Strassen矩阵乘法

一个n-by-n矩阵是n行n列的数排列起来的方阵。矩阵A第i行第j列数记为aij。定义两个n阶矩阵的乘法C = A * B,其中cij = ai1b1j + ai2b2j + ... + ainbnj基本的矩阵乘法是O(n3)的,程序如下:void matmult ( matrix a , matrix b , matrix & c){ c.m = a.m; c.n = b.n fo

2013-01-26 05:40:13 3115

原创 乘法算法-Karatsuba算法

考虑两个n位整数x和y的乘法。基本的算法是O(n^2)的。以10进制为例,用bigint表示大整数类型,s[1]表示个位,len为位数。按照小学数学多位数乘法法则,程序如下:bigint mult(bigint a, bigint b){ bigint c; c.len = a.len + b.len ; for(int i=1; i <= c.len; i++) c.s[i]

2013-01-26 04:54:59 14602

原创 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。

最大最小值给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。用递归的方法可以做。假设需要T(n)的时间求n个数的最大值和最小值,显然T(2) = 1。我们按照分治三步法进行算法设计。划分把n个数均分为两半。递归求解求左半的最小值minL 和最大值maxL以及右半最小值minR和最大值maxR。合并所有数的最大值为maxfmaxL; maxRg,最小值为minfminL;

2013-01-25 14:20:24 7106

原创 双机调度问题

流水作业调度问题(flow shop scheduling problem)有n个作业要在两台机器M1和M2组成的流水线上完成加工。每个作业i都必须先花时间ai在M1上加工,然后花时间bi在M2上加工。确定n个作业的加工顺序,使得从作业1在机器M1上加工开始到作业n在机器M2上加工为止总时间最少。直观上, 最优调度一定让M1没有空闲, 而让M2的空闲时间尽量少。下面的Johnson算法是贪

2013-01-21 13:07:21 2804

原创 区间覆盖问题

类似问题:互动安排问题和选点问题区间覆盖问题数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[s, t]。用贪心法解决这个问题的思路如下:(1)找到所有的、起点小于s的区间(2)把这些区间按照终点,从小到大排序(3)选择终点最大的那个区间,设这个最大的终点是bi(4)现在问题变成了,“选择尽量少的区间覆盖一条指定线段[bi, t]”(5)用相

2013-01-21 12:53:01 2593

原创 选点问题

类似的问题:活动安排问题和区间覆盖问题。数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。如果区间i内已经有一个点被取到,我们称此区间已经被满足。我们先讨论区间包含的情况。由于小区间被满足时大区间一定也被满足。所以在区间包含的情况下,大区间不需要考虑。把所有区间按b从小到大排序(b相同时a从大到小排序),则需要考虑的区间的a

2013-01-21 12:29:38 1172

原创 循环赛日程表

循环赛日程表<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->设有n位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程。思路:用递归方法编写的问题解决程序具有结构清晰,可读性强等优点,且递归算法的设计比非递归

2013-01-21 09:34:40 749

原创 八皇后问题,解决思路和代码

<!--@page {margin:0.79in}p {margin-bottom:0.08in}-->八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。这里给出八皇后问题的解答。思路是:对解答树进行深度遍历,当遍历抵达第8层的时候,我们便找到了一个解。如果在抵达第8层之前,发现解答树的节点违反了八皇后问题的要求,那么进行回溯。具体的代码如下:

2013-01-21 06:19:38 2403

Monte carlo模拟的Mathematica代码

本文件是用Mathematica代码编写的Monte carlo模拟。 包含均匀分布,指数分布,以及均匀分布在圆和球面上的点。

2010-04-10

网格搜索法--求公切线算法

网格搜索法--求公切线算法。Mathematica程序。

2009-07-08

北邮通信电子电路自测题

这是本人在北邮学习期间,搜集的通信电子电路自测题。老师给的。很有价值。

2009-07-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除