- 博客(18)
- 资源 (2)
- 收藏
- 关注
原创 (016)给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树(keep it up)
给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树。由于数组是递增有序的,每次都在中间创建结点,类似二分查找的方法来间最小树。struct TreeNode{ int data; TreeNode* leftChild; TreeNode* rightChild;};void newNode(TreeNode*& vNode, int vData){ vNode
2014-08-30 01:48:52 1934
原创 (015)实现一个函数检查一棵树是否平衡(keep it up)
实现一个函数检查一棵树是否平衡。对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。这个题我们可以采用暴力搜索,找到叶子节点到根节点的最小值和最大值,然后他们的差如果大于1就不是平衡树,反之则是平衡树。int MinDepth = std::numeric_limits::max();int MaxDepth = std::numeric_limits::
2014-08-29 02:41:21 1340
原创 014写程序将一个栈按升序排序,对这个栈是如何实现的,你不应该做任何特殊的假设(keep it up)
写程序将一个栈按升序排序。对这个栈是如何实现的,你不应该做任何特殊的假设。程序中能用到的栈操作有:push | pop |isEmpty最容易想到的就是优先队列来做此题,容易实现。另外我们可以再用一个栈来实现栈的升序排列。优先队列://优先队列来实现void sortStack(std::stack& vStk){ std::priority_queue, std::gr
2014-08-28 00:54:45 1684
原创 013使用两个栈实现一个队列(keep it up)
使用两个栈实现一个队列队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列则将第一个栈的数据依次压入第二个栈,然后出栈.两条规则:1)进队列,则直接压入第一个栈2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空,则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空
2014-08-27 00:53:22 1361
原创 012温习汉诺塔 (keep it up)
汉诺塔:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,应该怎么移动?汉诺塔是个非常经典的问题,讲递归时应该都会讲到它。如果我们没有递归的先验知识, 直接去解答这道题,常常会觉得不知道如何下手。用递归却可以非常优美地解决这个问题。使用递归的一个关键就是,
2014-08-25 00:29:32 1312
原创 011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否?如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值。 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办。
2014-08-22 21:22:39 1921
原创 010给定一个循环链表,实现一个算法返回这个环的开始结点 (keep it up)
给定一个循环链表,实现一个算法返回这个环的开始结点。定义:循环链表:链表中一个结点的指针指向先前已经出现的结点,导致链表中出现环。例子:输入:A -> B -> C -> D -> E -> C [结点C在之前已经出现过]输出:结点C可以用一个map 就解决问题了。下面是编程之美上一种奇特的解法:快慢指针解法。代码:
2014-08-22 19:51:09 2080
原创 009实现一个算法来删除单链表中的一个结点,只给出指向那个结点的指针(keep it up)
呵呵,这个题不能直接删除已知的结点,因为是单链表,不知道前驱,只知道后继结点,直接删除会使链表断开。不过我们可以删除已知结点的后继结点,把后继结点的值赋值给已知结点。#include struct Node{ int data; Node* next;};bool removeNode(Node* vNode){ if (vNode == NULL || vNo
2014-08-20 00:35:57 1309
原创 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)
我们维护两个指针, 它们之间的距离为n。然后,我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变。那么,当第二个指针指到空时,第一个指针即为所求。#include struct Node{ int data; Node* next;};void initList(Node* vNode){ for (int i=0; i < 20; ++i) {
2014-08-19 00:45:52 1557
原创 007 字符串(keep it up)
假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串。 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码。旋转字符串:"waterbottle"是"erbottlewat"的旋转字符串。简答题:#include #include bool isSubstring(const std::stri
2014-08-18 00:56:22 1346
原创 c结构体里的数组与指针
/*访问成员数组名其实得到的是数组的相对地址,而访问成员指针其实是相对地址里的内容*/struct buf_str{int length;char buf[0];};struct foo{buf_str* pbuf;};void test_funny(){foo f = {0};printf("%x\n"
2014-08-16 11:05:32 1079
原创 006矩阵旋转90度(keep it up)
一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)这个题第一感觉就是一次交换矩阵的元素:比如 3*3 矩阵1 2 34 5 67 8 9先处理第一行,一次逆时针旋转四个元素,下面是二次做的3 2 9 3 6 94 5 6 2 5 81 8 7
2014-08-15 20:59:02 1057
原创 005判断两个字符串是否是变位词 (keep it up)
写一个函数判断两个字符串是否是变位词。变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词这也是简单的题。 我们可以排序然后对比, 也可以直接统计字符出现的个数来判断。这里给出统计字符来判断的代码:bool isAnagram1(const string& vLeft, const string& vRight){
2014-08-14 01:46:24 1608
原创 004字符串去重 (keep it up)
设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。简单题直接上代码:#include #include void remove_duplicate(char vStr[]){ int Len = strlen(vStr); if (!Len) { printf("the stri
2014-08-13 00:30:03 897
原创 003实现字符串反转reverse
这个简单就直接代码了//写代码翻转一个C风格的字符串。(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符)#include #include void swap(char& vLeft, char& vRight){ char Temp = vLeft; vLeft = vRight; vRight = Temp;}char* reverse(ch
2014-08-12 00:28:56 1106
原创 002 bitmap海量数据的快速查找和去重
题目描述给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用。如果你只有10MB的内存呢?
2014-08-10 22:51:58 5583 2
原创 001 unique string
以后坚持每个星期都写记到算法题,不论简单还是难,纯熟娱乐!描述:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)代码:#include #include #include #include bool isUnique(const std::string& vStr){ if (vStr.size()
2014-08-10 10:43:23 981
assimp--3.0.1270-source-only.zip
2013-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人