KMP算法 ###对于主串长度为m,模式串长度为n的匹配,使用KMP算法复杂度为O(m+n)#include<iostream>#include<string>#include<vector>using namespace std;//首先构建next矩阵,用于确定重新匹配时模式串开始的位置void get_nextval(const char* ptrn,...
归并排序 #include<iostream>#include<vector>using namespace std;//将两个排好序的序列合并void merge(vector<int>& data, int start, int mid, int end){ vector<int> tmp(end - start + 1); int...
动态规划---纸币组合问题 题目:假设银行里一共有n种硬币,第一种硬币的价值为V1。假设想把k元兑换成零钱,一共有多少种兑换方案。例如,一共有1,2,5三种硬币,k = 5,则有以下兑换方案:11111,1112,122,5。共有4中兑换方案。 动态规划问题最重要的是要找到状态转移方程!!! 用dp[i][sum]表示使用前i种硬币来组合sum这些钱有多少种兑换方案。那么dp[i][sum] = dp[...
最大子序列和问题 给定整数A1,A2,A3······An(可能有负数),求序列中子序列和的最大值。(为方便起见,若所有整数都为负数,则最大子序列和为0)int MaxSubSequenceSum(vectorint> A){ int thisSum, maxSum; thisSum = maxSum = 0; for (size_t i = 0; i < A.size(); i+
快速选择---选择数组中第k个最小值 参考《数据结构与算法分析》186页,按照快速排序的思路进行找出第k个最小值,其中只保证数组中第k-1个值为第k个最小值。(同样,第k个最大值为第size - k + 1个最小值)#include#include#define cutOff 3using namespace std;//三数中值分割方法int Media3(vectorint>& vecUnsort, int
快速排序和插入排序 基于《数据结构与算法分析》182页,写的快速排序。对于枢纽元的选择使用三数中值分割法。#include<iostream>#include<vector>#define cutOff 3using namespace std;//三数中值分割方法int Media3(vector<int>& vecUnsort, int left, int right){ int center =
数组中只出现一次的数字 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。//可以用位运算实现,如果将所有所有数字相异或,则最后的结果肯定是那两个只出现一次的数字异或的结果,所以根据异或的结果1所在的最低位,把数字分成两半,每一半里都还有只出现一次的数据和成对出现的数据这样继续对每一半相异或则可以分别求出两个只出现一次的数字void FindNumsAppearOnce(vect
滑动窗口中的最大值 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},{2,3
栈 1.栈的压入弹出,pushV序列表示栈的压入顺序,判断popV序列是否是该栈的一种弹出顺序//大致思路就是,首先按照pushV的顺序压入栈,当栈顶和popV的值相同时出栈。判断栈最后是否会有剩余序列bool IsPopOrder(vector<int> pushV, vector<int> popV) { stack<int> tmpStack; int i = 0; in
基数排序 基数排序详见《数据结构与算法分析》40页//待排序vector中数的最大位数int maxbit(const vector<int>& unSort){ int maxb = 0; for (int i = 0; i<unSort.size(); i++) { int tempMaxb = 1; int tempNum = unSort[i
链表 1.输入一个链表,从尾到头打印链表每个节点的值vector<int> printListFromTailToHead(ListNode* head) { vector<int> dst; while (head != nullptr) { dst.push_back(head->val); head =...
Ubuntu16.04 MatConvNet-1.0-beta25 Matlab2017a GPU cuDNN编译 使用Matlab2017a对MatConvNet-1.0-beta25的GPU编译过程可参考MatConvNet官网,在Ubuntu中一般来说cuda路径和cudnn路径一般是一个路径。但是编译之后会出现一个问题:Invalid MEX-file ‘/home/user/matlab/matconvnet-1.0-beta25/matlab/mex/ vl_nnconv.mexa64’;这个问题是
使用Anaconda安装库文件、控制台运行Python文件、显示Caffe网络结构 安装库文件: 以安装XGBoost为例,如果要使用XGBoost分类器,首先要在Python中安装XGBoost库文件。如果使用Anaconda安装的话,首先启动cmd窗口,进入到.\Anaconda2\Scripts目录下,然后在控制台运行anaconda search -t conda xgboost然后便会出现各个版本的xgboost,如下图。 选择自己合适的版本(以Win-64为
字符串-最长公共子序列(LCS)问题 题目:求两个字符串的最大公共子序列(可以不连续)的长度,并输出这个子序列。例如:输入 googleg和elgoog 输出 goog 4 输入 abcda和adcba 输出 aba 3 而为了得到相同的子序列,需要根据回溯路径,写出匹配字串,如下图,绿色的部分就是路径回溯的结果。 代码如下:int SearchMaxLengthSequence(string s1,...
整数中1出现的次数(从1到n整数中1出现的次数) 本题可分为两道题,如下: 题目描述:求出1~n的整数中1出现的次数,例如1~13中包含1的数字有1、10、11、12、13。此时如果按照1出现的次数,那么将会有6次。如果是含有1的数字的个数,则为5个。下面将分别按照不同的方式来给出代码。1. 1~13中含有1的数字为5个int NumberOf1Between1AndN_Solution1(int n){ int bit = -1;
输出任意字符串中最长的回文长度 如题,查找字符串中最长的回文,并输出该回文的长度。例如: 输入:12ABBA 输出:4 输入:51233214 输出:6#include<string>#include<iostream>#include <algorithm>using namespace std;...
二维数组中的查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移代码:class Solution {public: b
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 题目描述: 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 示例1: 输入:9876673 输出:37689#include<iostream>using namespace std;int main(){ int n; int a[10]={0}; int num=0; cin>>n ; while(n)
剑指offer--放苹果(递归) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入 每个用例包含二个整数M和N。0<=M,1<=N。解题分析:设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论, 当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(...
输入正整数A和正整数B,输出A和B的最大公约数和最小公倍数。 最小公倍数 = A * B / 最大公约数; 求解最大公约数的其中一中方法是辗转相除法。辗转相除法原理:如果a是任一整数而b是任一大于零的整数,则我们总能找到一整数q,使a=bq+r;并且a与b的最大公约数和b与r的最大公约数是相同的。由此可得链接:https://www.nowcoder.com/questionTerminal/22948c2cad484e0291350ab