
算法
文章平均质量分 72
runner668
这个作者很懒,什么都没留下…
展开
-
图的深度搜索
终于进行到这一阶段了!对于图问题,标准的解法是 标记数组加 dfs, 考查的抽象能力:情景问题转换为图的搜索问题。第一个简单的问题:岛屿问题#include <iostream>#include <vector>#include <algorithm>using namespace std;void dfs(vector < ...原创 2018-09-09 17:52:34 · 891 阅读 · 0 评论 -
之字形打印二叉树
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: ve...原创 2018-06-20 18:56:29 · 152 阅读 · 0 评论 -
混合编译 extren 与c++重载机制
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。...转载 2018-05-04 15:03:26 · 333 阅读 · 0 评论 -
c++中lambda+function
1. lambda lambda-introducer (捕获字段) lambda-parameter-declaration-list (变量列表) mutable-specification (捕获的变量可否修改) exception-specification (异常设定) lambda-return-type-clause (返回类型) compound-statemen...原创 2018-05-01 20:27:13 · 1316 阅读 · 0 评论 -
c++随机数生成
#include <iostream>#include <vector>#include <cmath>#include <ctime>#include <cstdlib>#include <algorithm>using namespace std;//#define random(a,b) (rand()%(...原创 2018-05-01 18:57:43 · 299 阅读 · 0 评论 -
函数式编程和面向对象的编程对比与格式化字符串
函数式编程是一种代码重用策略 ,编写的代码代码安全,可靠,可重用! 主要原则:使用的函数没有副作用,即函数的输出完全取决于输入,且不修改外部的任何东西。 主要特征:函数本身就是对象,可以将其作为参数传递给其它函数,还可以存储在变量中。 而在面向对象编程中,面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念...原创 2018-05-01 16:23:21 · 230 阅读 · 0 评论 -
待解决的小问题
一:管道和套接字一样不是属于进程的资源,而是属于操作系统的?原创 2018-04-13 22:22:59 · 124 阅读 · 0 评论 -
二叉树后续遍历算法
二叉树的后序遍历顺序为,root->left, root->right, root,因此需要保存根节点的状态。显然使用栈来模拟递归的过程,但是难点是怎么从root->right转换到root。 方法一对于节点p可以分情况讨论1. p如果是叶子节点,直接输出2. p如果有孩子,且孩子没有被访问过,则按照右孩子,左孩子的顺序依次入栈3. p如果有孩子,而且孩子...原创 2018-04-12 15:14:51 · 1477 阅读 · 0 评论 -
结构体
#include "stdio.h"#include "stdlib.h"struct a{ int a; int b[2]; struct a * next;};int main(){ struct a a1; struct a a2; struct a *a3; a2.next = &a1; a3 = &am...原创 2018-04-05 11:19:44 · 170 阅读 · 0 评论 -
被三整除
这个题暂时可以归为数学归纳法方法一:这里可以用到一个数学课学过的性质。如果a+b+c的值可以被3整除。那么abc组成的数也能够被3整除。#include<stdio.h>#define maxlen 1007char road[maxlen];int main() { int t, i; scanf("%d", &t); for (i = 0; ...原创 2018-04-04 22:23:24 · 796 阅读 · 0 评论 -
数组和链表实现简单的栈
//首先用数组实现,接着用c++类实现了链式栈#include <stdio.h>#include <stdlib.h>//c语言数组实现简单的栈#define MAXSIZE 100typedef struct mystack{ int data[MAXSIZE]; int top;} my_stack, *my_stack_type;//创建...原创 2018-03-29 15:47:05 · 248 阅读 · 0 评论 -
STL——SET操作与并交差
一:set的集合运算推荐一篇:https://blog.youkuaiyun.com/u014023993/article/details/47614381 #include <iostream>#include <set>#include <algorithm>using namespace std;void put_in(set<int>...原创 2018-08-05 22:03:41 · 825 阅读 · 0 评论 -
实现相对位置不变的奇数偶数排序
例如 将 12345 变成:13524求最少的额交换次数这里用到了排序的思想 #include <iostream> #include <vector> using namespace std; int reOrderString(string &vec) { int size = vec.size();...原创 2018-08-31 09:22:04 · 1386 阅读 · 0 评论 -
字符串的组合
一:用递归实现#include<iostream>#include<vector>#include<cstring>#include<cstdlib>using namespace std;void CombinationCore(char * str, int len, vector<char> &...原创 2018-08-29 10:20:31 · 324 阅读 · 0 评论 -
将整数拆分成四份
class Solution(object): def helper(self, s, dotnum, ret, rets): if dotnum > 4 or (len(s) / 3 > 4-dotnum): return if len(s) == 0: if dotnum == 4:...原创 2018-09-09 17:16:02 · 509 阅读 · 0 评论 -
公共子串加全排列
// INCLUDE HEADER FILES NEEDED BY YOUR PROGRAM // SOME LIBRARY FUNCTIONALITY MAY BE RESTRICTED // DEFINE ANY FUNCTION NEEDED // FUNCTION SIGNATURE BEGINS, THIS FUNCTION IS REQUIRED //#...原创 2018-09-04 00:14:09 · 145 阅读 · 0 评论 -
字符串的最大子串问题
基于字符串的最大子串问题是经常面试的问题,想要表现的好不但要会基础的方法,同时还要学会优化的算法。常考的有两个问题:1:两个字符串的最大公共子串(还可能是子序列)2:同一个字符串中相同的最大子串问题例如输入qweabcuwabcfw,输出结果为:重复字符串的长度3和位置4一:求两个字符串的最大公共子串 #include<iostream> #...原创 2018-09-03 16:04:48 · 14425 阅读 · 0 评论 -
生成括号-回溯的应用
问题:n对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())本文就是一个简单的练手:但是重在学习给递归添加约束得到我们预期的结果!思路:问题可转化为:在一个string中包含两个字符:'('和')',他们出现的次数都为n,并且任何时候'('出现的次数总是>=')'出现的次数。解决方案(递归):标志:l: 左括号出现的次数,r:右括号出现的次数,n: 括号...原创 2018-09-02 15:43:53 · 605 阅读 · 0 评论 -
二叉树中两个节点的最低公共祖先
求二叉树树中的两个节点的最低公共祖先是个有趣的问题,涉及到对递归的理解。可以参考博客:https://www.cnblogs.com/felixfang/p/3828915.html转自:http://gaotong1991.iteye.com/blog/2042770 方法一下面是一个简单的复杂度为 O(n) 的算法,解决LCA问题1) 找到从根到n1的路径,并存储在一个向量...转载 2018-09-02 10:33:08 · 775 阅读 · 0 评论 -
设计LRU实现get和put操作
这道题重在数据结构的使用,要求是o(1)的时间复杂度完成上面两个操作,自然想到了哈希。第一种解法:用数组实现哈希 #include <vector> #include <iostream> #include <string.h> using namespace std; //ector< vector<in...原创 2018-09-04 23:25:39 · 1232 阅读 · 0 评论 -
美团笔试-图的最短路径-树的深度-python
这道题不要求保存路径,因此就不用列举所有的可能性(实习也很难遍历完每种可能),上图题解就是一个很好的思考过程,我们不需要一个一个尝试,只需知道有种路径一定是先遍历短路径子树,最后再遍历长路径子树就可以了。输入输出类似:因为实在找不到原题了第一种解法:利用python数组列表保存元数据def min_path(n, B): node_list = [0] * (n...原创 2018-09-07 20:00:10 · 1246 阅读 · 0 评论 -
装箱问题
装箱问题是背包问题的变形,其中相对背包问题要简单一点。一:装箱剩余问题问题描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式 第一行为一个整数,表示箱子容量; 第二行为一个整数,表示有n个物品; 接下来n行,每行一个整数...转载 2018-09-04 15:55:41 · 9496 阅读 · 2 评论 -
基于merge的归并排序
归并排序基于分制思想(二分法),可以将事件复杂度降低到 nlog(n),在很多情况下都能用到!归并排序的重点是合并函数的partation()的书写。本文结合几个简单的例子,分别引出数组和单向链表的partation函数的书写。一:数组的归并排序/****合并函数****/ void Merge(int A[],int left,int mid,int right) { ...原创 2018-09-01 16:55:12 · 409 阅读 · 0 评论 -
求连续子数组的最大和
一般考数组的题目,重在挖掘数字时间的规律,只要找到规律就可以写递推关系式,很容易编写基于循环的或者是动态规划的程序。 第一种解法:基于sum更新的解法class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { if (array.si...原创 2018-09-01 14:44:56 · 281 阅读 · 0 评论 -
算法分析之动态规划三
前两篇是在上算法课的时候对动态规划的初步了解,今面临找工作的需求,又把动态规划复习了一下,在理解上比之前更深了一点点,之前太偏向于解决单个问题。例如 0-1背包问题,现在站在程序设计与优化的角度结合两篇不错的博客来做个简单的整理。本篇重在分析动态规划与递归的关系:动态规划分两种形式:一种是自顶向下的,采用递归;另一种是自底向上的,从求解最小的子问题开始,逐步求解得原问题,就是...原创 2018-09-01 10:59:22 · 297 阅读 · 0 评论 -
网易在线笔试牛牛的背包
背包问题首先想到的就是动态规划了,但是这相当于遍历没一种可能性,当背包容量足够大,零食种类足够多的时候就会出现超时的情况。问题等价于 其中,表示第i个放入还是不放入,设state(i,w)表示i个零食放入背包小于等于W的个数,把state(i,w)分解,可以分解为两个情况: 1、是第 i个不放入时,前i-1个零食放入背包小于等于W的种数即state(i-1,w); ...原创 2018-04-04 21:29:13 · 575 阅读 · 0 评论 -
二分法实现查找
说明:二分查找是基于排序数组(序列的),时间复杂度为logN,但是需要对数组进行排序,最快的 快速排序算法的时间复杂度是NlogN; 实现上分为循环和递归#include <iostream>#include <string>using namespace std;//这里边int *a 也是可以的 int sort21( int a[] ,int n...原创 2018-03-29 12:09:50 · 182 阅读 · 0 评论 -
结构体共用体内存分配规律
一:字节对齐不同操作系统里默认的对其方式存在差别,不过我见过貌似都是8 Byte对齐的,可以通过#pragma pack(n)来设定按n字节对其。例:#pragma pack(2) #pragma pack(4)struct B struct C...原创 2018-04-01 19:59:53 · 1674 阅读 · 0 评论 -
基于数组的快速排序
快速排序算法的实现关键就是我们选的基准的位置!然后程序就是个递归调用,数组和链表的实现上还是有很大的差别的。#include "stdio.h"//快速排序,核心是定位和递归(数组实现)void swap(int &a,int &b){ //传地址交换 int temp = a; a = b; b =temp;}/...原创 2018-04-01 09:21:35 · 1425 阅读 · 0 评论 -
c++新特性与注意事项
一:委托构造:委托构造,就是构造函数调用其他的构造函数来完成构造过程,其他的构造函数写在成员初始列表中。#include <iostream>using namespace std;class base{private: int a;public: //非委托函数使用相应的实参初始化相应的实参初始化成员 base(int a): a(a){};...原创 2018-04-08 17:38:13 · 153 阅读 · 0 评论 -
快速排序算法的实现
快速排序算法的实现关键就是我们选的基准的位置!然后程序就是个递归调用,数组和链表的实现上还是有很大的差别的。#include "stdio.h"//快速排序,核心是定位和递归(数组实现)void swap(int &a,int &b){ //传地址交换 int temp = a; a = b; b =temp;}/...原创 2018-03-30 19:31:44 · 291 阅读 · 0 评论 -
合并两个排序的链表
一 :代码的完整性二:程序的鲁棒性第一种方法用循环实现/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, List...原创 2018-03-18 17:02:33 · 173 阅读 · 0 评论 -
opencv3.10与vs2013安装配置教
楼主的vs是2013版的,无奈只能安装310版的opencv,但是对于我这个初学者来说已经够用了!都说opencv不好配置,但是我参考网上的教程,很顺利低配置出来了,且一次配置,处处可用,哈哈!注意使用的时候一定把工程改成64位的编译器!步骤:一:下载,解压,添加环境变量:将系统变量中的PATH后面加上 C:\opencv3.1\opencv\build\x64\vc12\bin ;原创 2018-02-06 15:03:09 · 638 阅读 · 0 评论 -
二分算法分田地
题目描述牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成 16 份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地, 作为牛牛最好的朋友,你希望牛牛取得的田地的价值和尽可能大,你知道这个值最大可以是多少吗?输入描述:每个输入包含 1 个测试用例。每个测试用例的第一行包含两原创 2018-01-28 16:39:12 · 1059 阅读 · 0 评论 -
C++实现二叉树的递归与非递归遍历
树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。广度优先遍历(层次遍历) 主要实现手段要用到栈和队列!#inclu...原创 2018-01-26 18:36:24 · 1633 阅读 · 0 评论 -
简单的堆排序
堆排序的是先建立一个完全二叉树,之后调整成一个大顶堆,再进行堆调整的过程!#include #include //时间函数 #include using namespace std;int h[101];//用来存放堆的数组int n;//用来存储堆中元素的个数,也就是堆的大小void swap(int x, int y){ int t; t = h[x]; h[x原创 2018-01-21 09:50:52 · 192 阅读 · 0 评论 -
算法分析之动态规划二
之前对动态规划问题有了一个初步的了解,举的是一个经典的背包问题的例子,但是分析的不够透彻,这里再对它做进一步的说明。 一:动态规划问题的每一步都是最优解,因此OPT(i,w)是一个单调非减函数,当然有些问题是单调非增函数,总之是一种单调函数! 二:动态规划问题把大的问题分成了一系列互不相关的子问题来解决,因此以后用这个算法的时候要考虑 目标原创 2017-03-10 19:09:24 · 353 阅读 · 0 评论 -
单链表快速排序算法的实现
快速排序: 快速排序的主要思想是: 1)选定一个基准元素 2)经过一趟排序,将所有元素分成两部分 3)分别对两部分重复上述操作,直到所有元素都已排序成功 因为单链表只能从链表头节点向后遍历,没有prev指针,因此必须选择头节点作为基准元素。这样第二步操作的时间复杂度就为O(n)。由于之后都是分别对两部分完成上述操作,因此会将链表划分为lgn个段,因此时间复杂度为O(n...原创 2018-04-02 10:26:41 · 14298 阅读 · 3 评论 -
常见算法的时间复杂度
原创 2018-04-02 10:35:55 · 1212 阅读 · 0 评论 -
c++递归,回溯与搜索算法
这部分题分两个问题:1组合优化问题(顺序无关)。2排列选择问题(一般有个book[]数组记录搜索过没有)一:回溯法 注意:回溯法是一种完全搜索,有时进行适当的裁剪可以减少好多不必要的搜索步骤!首先实现的是一个简单版本的回溯!#include <vector>using namespace std;class Solution {public:...原创 2018-04-09 16:43:11 · 1648 阅读 · 0 评论