![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 91
EverythingBlue
知其然,知其所以然
展开
-
POJ 1050
描述给定一个二维数组,包含正整数、负整数,一个子矩形是在该数组中,任何邻近的1*1或更大的子数组。矩形的和是矩形中所有元素的和。在该问题中,有最大和的子矩形成为最大子矩形。 例如,给定二维数组: ⎡⎣⎢⎢⎢09−4−1−2218−7−6−40021−2⎤⎦⎥⎥⎥\left[\begin{matrix}0 & -2 & -7 & 0 \\9 & 2 & -6 & 2 \\-4 & 1 &转载 2016-01-05 20:44:27 · 391 阅读 · 0 评论 -
Top K问题
Top K问题:前K个最大的数 参考 海量数据处理的 Top K算法(问题) 小顶堆实现 《算法导论》读书笔记之第6章 堆排序 问题描述输入N个整数, N很大, 求出其中的前K个最大的数,K很小,一般在10以内。由于输数据很大,但只求前K个最大的值,所以对所有输入数据的保存和排序是不可取的。1 解法一 :最小堆利用最小堆的性质,每个非叶结点的数值,都小于等于其孩子节点的原创 2016-06-09 16:53:51 · 463 阅读 · 0 评论 -
剑指offer 面试题49 把字符串转换成整数
#include <iostream>using namespace std;enum Status {kValid = 0, kInvalid};int g_nStatus = kValid;long long StrToIntCore(const char* digit, bool minus){ long long num = 0; while(*digit != '\原创 2016-07-11 09:20:32 · 509 阅读 · 0 评论 -
剑指offer 面试题50 树中两个节点的最低公共祖先
// 剑指offer 面试题50 树中两个节点的最低公共祖先#include <iostream>#include <list>#include <vector>using namespace std;struct TreeNode{ char value; vector<TreeNode*> m_vChildren; TreeNode(char v) : value原创 2016-07-11 09:55:50 · 439 阅读 · 0 评论 -
Top K问题
Top K问题:前K个最大的数 参考 1. 海量数据处理的 Top K算法(问题) 小顶堆实现 2. 《算法导论》读书笔记之第6章 堆排序 3. 寻找最小的k个数问题描述输入N个整数, N很大, 求出其中的前K个最大的数,K很小,一般在10以内。由于输数据很大,但只求前K个最大的值,所以对所有输入数据的保存和排序是不可取的。1 解法一:最小堆利用最小堆的性质,每个非叶结点的数原创 2016-06-15 11:45:23 · 1196 阅读 · 0 评论 -
剑指offer 面试题1 赋值运算符函数
参考: 《剑指offer 名企面试官精讲典型编程题 纪念版-何海涛 著》题目:为如下类型添加赋值运算符函数class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pD原创 2016-06-24 23:02:55 · 468 阅读 · 0 评论 -
剑指offer 面试题2 Singleton模式 C++实现
参考: 1、题目来源《剑指offer 名企面试官精讲典型编程题 纪念版-何海涛 著》 2、C++设计模式——单例模式: http://www.jellythink.com/archives/82 3、C++11多线程教程:http://billhoo.blog.51cto.com/2337751/1294190题目:实现Singleton模式 以下内容原创 2016-06-24 22:55:46 · 3170 阅读 · 2 评论 -
剑指offer 面试题26 复杂链表的复制
// 剑指offer 面试题26 复杂链表的复制#include <iostream>using namespace std;struct ComplexListNode{ int m_nValue; ComplexListNode* m_pNext; ComplexListNode* m_pSibling; ComplexListNode(){m_nValue原创 2016-07-04 07:54:02 · 323 阅读 · 0 评论 -
百度2017暑期实习生编程题
1 单词接龙/* 单词接龙 */#include <iostream>#include <string>#include <vector>using namespace std;const int MAX_LIST_LENGTH = 200;bool isRight(vector<string>& vec, int length){ if(vec.size() < 2)原创 2016-07-20 09:19:07 · 652 阅读 · 0 评论 -
完美洗牌:数论+分治+数组循环移动
参考 1.完美洗牌算法 2.第三十五章、完美洗牌算法 数论部分请看参考2.问题长度为2n的数组{a1,a2,a3,a4,...,an,b1,b2,b3,b4,...,bna_1, a_2, a_3,a_4,...,a_n,b_1,b_2,b_3,b_4,...,b_n} 经过洗牌变为{b1,a1,b2,a2,b3,a3,b4,a4,...,bn,anb_1,a_1,b_2,a_原创 2016-06-09 13:09:56 · 2307 阅读 · 0 评论 -
冒泡排序 及其两次优化
冒泡排序 及其两次优化1 冒泡排序:原版第一次,最大的“上浮”到最上面第二次:第2大的“上浮”到最上面void bubble_sort(int *a, int n){ for(int i = 0; i < n - 1; ++i){ // 每趟排序,最大值“沉底”,所以共需n-1趟, for(int j = 0; j < n - i - 1; ++j){ // 每趟排序中,从头原创 2016-06-12 22:41:42 · 704 阅读 · 0 评论 -
POJ 1207 3n+1问题
描述考虑下列算法: 1. input n 2. print n 3. if n = 1 then STOP 4. if n is odd then n <- 3n+1 5. else n <- n/2 6. GOTO 2输入:22, 打印序列:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 假设对于所有整数值,算法可终止(打印到1时原创 2016-01-06 15:47:48 · 401 阅读 · 0 评论 -
二叉树的四种遍历方式:递归、非递归+栈、Morris(后序非递归还有一种单栈和双栈的不同版本)
本文参考: 参考文章1 参考文章2 参考文章3 代码中加入了一些自己的理解/* 二叉树的四种遍历方式*/#include <iostream>#include <stack>using namespace std;// 二叉树节点的定义class TreeNode{public: char val; //int val; TreeNode *left, *ri转载 2015-12-15 19:30:08 · 1760 阅读 · 0 评论 -
【自用】线段树 区间最小值
参考http://www.cnblogs.com/TenosDoIt/p/3453089.html概述是一种平衡二叉树,在每个节点保存一条线段(一个数组区间),主要用于高效解决连续区间的动态查询,基本能保持每个操作的复杂度为O(logn)。例子问题描述:从数组arr[0…n-1]中查找某个区间内的最小值,其中数组大小固定,但是数组中的元素的值随时可以更新。 最简单的解法:遍历数组区间找到最小值原创 2016-01-07 19:41:06 · 2236 阅读 · 0 评论 -
POJ 3468 线段树
描述N个整数,A1,A2,⋯,ANA_1, A_2, \cdots, A_N. 需要处理两种操作: 一种操作是在给定的区间,给区间内的每个数加上某个数。 另一种是在给定的区间求区间内的数的和。输入第一行是两个数,N,Q,1≤N,Q≤100000 1 \le N, Q \le 100000. 第二行是N个数,A1,A2,⋯,ANA_1, A_2, \cdots, A_N 的初始值, −1,000转载 2016-01-07 10:04:58 · 368 阅读 · 0 评论 -
POJ 1753
描述4*4的方格棋盘,每个棋子有白面和黑面,每个方格中的棋子为白/黑,每轮翻3~5个棋子改变它们的颜色,每轮根据以下规则选择翻面的棋子: 1. 选择16个棋子中的任一个 2. 翻转已选棋子的邻近棋子(左、右、上、下,四个邻近的棋子,如果有就翻) 示例:bwbbwwbwbwwwwwbb\begin{matrix}b & w & b & w \\w & w & w & w \\b & b原创 2016-03-02 21:19:58 · 362 阅读 · 0 评论 -
排序和查找-计数排序(Counting Sort)
转载自基数排序(Radix Sorting)0 前言常见的非比较排序算法:计数排序,基数排序,桶排序;平均时间复杂度都是O(n),但是限制比较多比较算法的时间复杂度下限为O(nlogn)1 思路输入的元素使n个0到k之间的整数时,时间复杂度为Θ(n+k)\Theta(n+k)由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围转载 2016-05-06 17:20:36 · 926 阅读 · 2 评论 -
排序和查找-基数排序 Radix Sorting
转载自:基数排序(Radix Sorting) 学习笔记1 思路将所有待比较数值(正整数)统一为同样的位数,位数较短的数前面补零。 从最低位开始,依次进行排序,从最低位排序一直到最高位排序完成后,数列就变成一个有序序列。2 两种方式基数排序有两种方式:2.1 MSD第一种,最高有效位(MSD,Most Significant Digit): 假设有一些二元组(a,b),a为首要关键字,b为次要转载 2016-05-05 22:16:15 · 785 阅读 · 0 评论 -
调整数组顺序,使奇数位于偶数前面
这道题让我玩了一晚上。。。。。描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序, 使所有奇数位于数组的前半部分,偶数位于后半部分,并保证奇数之间相对位置不变,偶数之间相对位置不变。要求时间复杂度为O(n)。输入每个输入文件包含一组测试案例。 对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。 接下来的一行输入n个整数。代表数组中的n个数。输出对应每个测试案例, 输入一行n原创 2016-03-23 20:19:02 · 972 阅读 · 0 评论 -
排列组合专题
谨以此文献给排列组合的算法都实现不了的自己1 排列1.1 参考1.C语言如何打印一个数组排列组合?https://segmentfault.com/a/11900000007251761.2 思路n个元素选择m个进行排列数组arr,长度为n,找出从中取出m个数的所有组合。例如,{1,2,3}中选2个全排列如下:{1,2},{1,3},{2,1},{2,3},{3,1},{3,2}。假设数组的元素没有原创 2016-03-03 19:58:30 · 986 阅读 · 0 评论 -
C++实现 3.7猫狗队列
猫狗队列还是挺经典的一道题,思路是对不同类型的对象进行“包裹”,包裹后成为相同的类进行统一处理,不借助编译器的话,手写代码还是很容易出错的,果然简单的题也不是看起来那么简单。 直接上代码:#include <iostream>#include <string>#include <queue>#include <stdexcept>using namespace std;class Anim原创 2016-08-25 10:20:41 · 1078 阅读 · 1 评论