编程
文章平均质量分 69
Hot Autumn
世界上有10种人,一种知道二进制,一种不知道二进制......
展开
-
最大公约数和最小公倍数C/C++实现
#include using namespace std;// 最大公约数// 使用的是辗转相除法:求两个数的余数,当余数不为零,求除数和余数的余数,直到余数为零,最后除数就是最大公约数int gcd(int a, int b) { int c = a % b; while(c != 0) { a = b; b = c;原创 2016-08-16 09:04:15 · 700 阅读 · 0 评论 -
布线问题-分支限界法
布线问题就是在 M×N 的方格阵列中,指定一个起点 a、一个终点 b,要求找到起点到终点的最短布线方案(最短路径)。搜索从起点 a 开始,到目标点 b 结束。约束条件:有边相连且未成布线。搜过过程:从起点 a 开始,将其作为一个扩展结点,沿 a 的上、下、左、右 4 个方向的相邻结点扩展。判断约束条件是否成立,如果成立,则放入活结点表中,并将这些方格标记为 1。接着从活结点表中取出队首结点原创 2016-08-20 15:03:58 · 8325 阅读 · 0 评论 -
N 皇后问题-回溯法
N 皇后问题:在 N × N 的棋盘上放置彼此不受攻击的 N 个皇后,任意两个皇后不同行、不同列、不同斜线。思路:1. 因为皇后不能同行,所以,在每一行放置一个皇后就行2. 当在一行放置皇后的时候: 1) 顺序检查这一行每一个位置是否和上面所有的皇后,只要有一个同列或者在斜线上就不能放置;若找到一个满足的,放置在这个位置,开始下一行的皇后放置。 2) 当此行所原创 2016-08-20 15:34:32 · 1461 阅读 · 0 评论 -
汉诺塔-递归 VS 非递归
问题描述: 有一个梵塔,塔内有三个座A、B、C,A 座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图)。把这些个盘子从 A 座移到 C 座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3 个座上的盘子始终保持大盘在下,小盘在上。汉诺塔-递归#include #include using namespace std;void move(c原创 2016-08-20 16:30:46 · 690 阅读 · 0 评论 -
排序算法学习笔记
各种排序算法C++实现:冒泡排序、快排、直接插入排序、希尔排序、直接选择排序、堆排序、归并排序原创 2016-08-16 15:03:28 · 761 阅读 · 0 评论 -
字符串排列组合
1. 求字符串的所有排列(相同的字母无区别)2. 求 n 个字符长度为 m 的组合(相同的字母无区别)C++代码://==================================================================// 字符串的排列/* 求整个字符串的排列,可以看成两步:首先求所有可能出现在第一个位置的字符 * 即把第一个字符和后面所有的字原创 2016-08-16 13:54:22 · 820 阅读 · 0 评论 -
表示数值的字符串
判断一个字符串是否表示数值,可以为整数、小数,可以带科学计数法形式。一个数值的表示:[符号]大于等于1个整数[.[大于等于1个整数]][e|E[符号]大于等于1个整数]C++代码:void scanDigit(char* &String) {// 扫描字符串,直到不是数字为止 while('\0' != *String && '0' <= *String &原创 2016-08-19 18:36:17 · 534 阅读 · 0 评论 -
大整数加减法(C++实现)
头文件:LargeInteger.h#ifndef LARGEINTEGER_H_INCLUDED#define LARGEINTEGER_H_INCLUDED#include using namespace std;class LargeInteger {// 大整数(用字符串表示)public: LargeInteger() { this->numStr = "0"原创 2016-08-16 09:10:24 · 5565 阅读 · 0 评论 -
剑指Offer:字符流中第一个不重复的字符
字符流中第一个不重复的字符题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。C++代码:class CharStatis原创 2016-08-19 17:49:21 · 395 阅读 · 0 评论 -
剑指Offer:链表中环的入口节点
如果链表中有环,可以通过快慢指针,最后快慢指针肯定会相会于环中的某个节点;从这个相会的节点开始,当再次遇到该节点,即可统计环中有节点数 n;设置两个指针p,p1,p从头先走 n 步,p1在头部,然后两个指针同时 走,当两指针相遇时,相遇的节点即是环的入口。C++ 代码struct ListNode { int val; struct ListNode *ne原创 2016-08-19 20:59:26 · 489 阅读 · 0 评论 -
剑指Offer:删除链表中重复的结点
1. 删除链表中相邻的重复的点(若重复,则保留一个)C++代码:void DeleteDuplication(ListNode* &pHead) {// 删除链表中相邻的重复结点(保留一个) if(NULL == pHead) return; ListNode *p1 = pHead, *p2 = p1->next; while(p2 != NULL) {原创 2016-08-19 22:00:47 · 434 阅读 · 0 评论 -
二叉树学习笔记
二叉树学习笔记:序列化二叉树、反序列化二叉树、递归遍历二叉树、非递归遍历二叉树、层序遍历二叉树(分行和不分行)、之字形遍历二叉树、重建二叉树(根据先序和中序重建二叉树)、对称二叉树判断、二叉树的镜像、判断二叉树的子结构、判断是否是平衡二叉树、二叉树的深度、二叉树中和为某一值的路径、判断一个序列是不是二叉搜索树的后序遍历序列、二叉搜索树转为双向链表、查找二叉搜索树的第 k 小的结点原创 2016-08-25 21:41:47 · 930 阅读 · 0 评论 -
链表学习笔记
链表虚席笔记:从尾到头遍历链表、链表中倒数第 k 个结点、合并两个排序的链表、两个链表的第一个公共结点、链表中环的入口结点、判断链表是否是回文结构、删除单向链表中指定的结点(o(1)时间)、删除链表中相邻的重复结点(保留一个)、删除链表中重复结点(保留一个)、删除链表中相邻重复结点、复杂链表的复制原创 2016-08-25 22:18:32 · 1934 阅读 · 1 评论 -
最小生成树之普里姆(Prim)算法
Prim 算法是一种贪心算法设G=(V, E) 是无向连通带权图,V={0, 1, 2, ..., n-1};设最小生成树 T=(U, TE),算法结束时 U=V,TEC++代码:#include #define INFINITY 100000using namespace std;/* * n : 图的顶点个数 * u0:开始顶点 * C :带权邻接矩阵*/int原创 2016-08-16 21:33:01 · 520 阅读 · 0 评论 -
层序遍历二叉树VS之字形遍历二叉树
1. 层序遍历二叉树 C++ 代码vector > levelTraversal(TreeNode* pRoot) { // 层序遍历二叉树 vector > result; if(pRoot != NULL) { queue q; q.push(pRoot); int levelWith = 0; int n原创 2016-08-19 23:37:52 · 959 阅读 · 0 评论 -
网易笔试题:混合颜料
你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的原创 2016-08-15 20:56:31 · 2896 阅读 · 0 评论 -
不使用加减乘除运算做加法
int add(int num1, int num2) {// 不用加减乘除做加法 int sum, carry; while(true) { sum = num1 ^ num2;// 二进制下,计算两数的和(不考虑进位) carry = (num1 & num2) << 1;// 二进制下,计算进位 num1 = sum;原创 2016-08-16 11:15:53 · 521 阅读 · 0 评论 -
剑指Offer:和为 S 的两个数字 VS 和为 S 的连续正数序列
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。vector FindNumbersWithSum(const vector& Array, const int& sum) { vector result; if(Array.size() < 2 || sum < Array[0] + Array[原创 2016-08-16 14:33:16 · 450 阅读 · 0 评论 -
网易笔试题:小易喜欢的单词
小易喜欢的单词具有以下特性: 1.单词每个字母都是大写字母 2.单词没有连续相等的字母 3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。 例如: 小易不喜欢"ABBA",因为这里有两个连续的'B' 小易不喜欢"THETXH",因为这里包含子序列"THTH" 小易不喜欢"ABACADA",因为这里包含子序列"AAAA"原创 2016-08-16 14:42:10 · 2305 阅读 · 4 评论 -
网易笔试题:饥饿的小易
小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等)。小易原创 2016-08-16 14:47:00 · 3780 阅读 · 0 评论 -
网易笔试题:幸运的袋子
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以原创 2016-08-16 14:53:32 · 1889 阅读 · 0 评论 -
求二维平面上共线最多的点数
思想为:统计每个点的各个斜率的直线上有多少个点C++代码:#include #include #include #include #include // 随机数通用公式:a + rand() % n;其中的a是起始值,n是整数的范围/* 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b原创 2016-08-16 15:29:08 · 1251 阅读 · 0 评论 -
生成所有 n 位格雷码
n 位元的格雷码,那么格雷码的个数为 2^n#include #include #include using namespace std;/* 利用递归的如下规则来构造: * 1 位格雷码有两个码字 * n 位格雷码中的前 2^(n-1) 个码字等于 (n-1) 位格雷码的码字,按顺序书写,加前缀 0 * n 位格雷码中的后 2^(n-1) 个码字等于 (n-1) 位格雷码的原创 2016-08-16 15:53:53 · 1430 阅读 · 0 评论 -
矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 3×4 矩阵 a b c e s f c s a d e e 中包含原创 2016-08-28 21:23:53 · 613 阅读 · 0 评论 -
机器人的运动范围
题目描述地上有一个 rows 行和 cols 列的方格。一个机器人从坐标(0, 0)的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 例如,当 threshold 为 18 时,机器人能够进入方格(35, 37),因为 3+5+3+7 = 18。但是,它不能进入方格(35, 38),因为 3+5+3+8 =原创 2016-08-28 22:35:27 · 530 阅读 · 0 评论 -
单源最短路径(Dijkstra)算法
Dijkstra 算法是一种贪心算法。假定源点为 u,顶点集合 V 被划分为两部分:S 和 V-S,其中 S中的顶点到源点的最短路径的长度已经确定,V-S中的顶点到源点的最短路径待定。思想:1. 每次从 V-S 中选择一个距离 源点最近的顶点,将其加入到 S 中,并从 V-S 中删除这个顶点;2. 因为 S 中加入了新的顶点,更新 V-S 中其他所有点顶到源点的距离;3. 当原创 2016-08-20 10:27:55 · 682 阅读 · 0 评论 -
数组中的逆序对(归并排序思想解题)
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size 对于%75的数据,size 对于%100的数据,size输入例子:1,原创 2016-08-29 11:50:12 · 789 阅读 · 0 评论 -
最长公共子序列VS最长连续公共子序列
最长公共子序列、最长连续公共子序列原创 2016-10-06 16:46:01 · 2612 阅读 · 0 评论