算法
aNoobCoder
这个作者很懒,什么都没留下…
展开
-
腾讯17年校招-字符移位
#include<iostream> #include<String.h>using namespace std;int main(){ char s[1000]; char c; cin >> s; for(int i=strlen(s); i>=0; i--){ if(s[i]>='A' && s[i]<='Z' && i<strlen(s)-1 &原创 2017-03-04 16:03:12 · 326 阅读 · 0 评论 -
图的非递归遍历(深搜和广搜)
// // Created by Coder // #include <iostream> #include <vector> #include <stack> #include <queue> using namespace std; class DirectedGraph{ private: // 最大顶点数 const ...原创 2018-02-13 14:50:22 · 1110 阅读 · 0 评论 -
条形图中的最大矩形面积
问题描述 问题描述见这位的博客http://blog.csdn.net/jingsuwen1/article/details/51577983。这个比较简单,直接上代码吧。//比较函数,快排用 int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } //条形图中的最大矩形面积 int M...原创 2018-02-14 10:41:53 · 709 阅读 · 0 评论 -
DP之数塔问题
基本思路 比较简单的动态规划问题,自底向上的求解也比较容易理解。代码还可以继续优化,可以利用下三家矩阵的方法优化空间(为了方便描述,只是简单的实现)。 DP问题主要就是找子问题且把子问题的最优解存储起来,防止重复计算,看注释吧。代码// // Created by Coder。 #include <iostream> using namespace std; //a存数...原创 2018-02-13 21:53:19 · 585 阅读 · 0 评论 -
01背包问题的一般DP求解
老代码了,记录一下吧。借鉴了一个博客,我对代码加了点注释,那个博客找不到了,也没法贴地址//01背包问题 int bag() { //注意--体积和花费都是正整数 //a[i][j]代表前i件物品可以放入j体积的背包中的最大价值(前i件物品并不一定都放的进去) //数组的0下标都未使用 int a[6][13] = {{0}}; int val[6] = {...原创 2018-02-13 20:43:42 · 439 阅读 · 0 评论 -
查找二叉树的指定节点及根节点到该节点的路径
//查找二叉树指定节点 bool hasNode(TreeNode* pRoot, TreeNode* pNode){ if(pRoot == pNode) return true; bool has = false; if(pRoot->lchild != NULL) has = hasNode(pRoot->lchild, p...原创 2018-02-12 21:23:38 · 12460 阅读 · 0 评论 -
查询链表的倒数第k个位置及其变形
思路 这个也比较简单,和判断链表是否有环的思路类似,声明两个指针p1、p2指向链表首, 想让p2走k步,然后p1和p2一起走,直到p2到达链表尾部。//查找链表倒数第k个元素 LinkNode *getLastK(LinkNode *head, int k){ int counter = k; LinkNode *p1 = head, *p2 = head; whi...原创 2018-02-10 16:11:23 · 206 阅读 · 0 评论 -
判断链表是否有环
思路 两个指针p1和p2,从链首开始,p1每次走一步,p2每次走两步,一直循环下去。会出现两种情况 1.当p2为NULL时停止,说明无环 2.p2追上p1说明有环#include <iostream> using namespace std; //判断链表是否有环 typedef struct LNode{ int val; struct LNo...原创 2018-02-10 16:05:10 · 233 阅读 · 0 评论 -
判断二叉排序树
前言 二叉排序树的判断,我一开始的想法是根据定义,每次判断左孩子<=根节点<=右孩子,但是写着写着发现不对,我当时的程序有一个这样致命的错误: 102 12 5 16类似于这样的树也会被判断为正确。要解决这个问题也不是不行,就是每次在判断的时候要顺带判断所有祖先节点,觉得有些麻烦。正确的...原创 2018-02-10 15:34:56 · 951 阅读 · 0 评论 -
算法导论之最坏情况下为O(n)的选择算法
当n比较小时,隐含的常数较大#include<iostream> #include<algorithm> using namespace std;int PARTITION(int a[], int l ,int r,int k)//k为分界值下标 { swap(a[r],a[k]); //把分界值交换到右边 int left = l,right = r,pivot = a[原创 2017-03-05 13:55:04 · 1033 阅读 · 0 评论 -
堆排序heapsort
#include<stdio.h> void swap(int& a,int& b) { if(a!=b) { a^=b; b^=a; a^=b; } } void MAX_HEAPIFY(int a[],int length,int i)//a数组第一个存值 { int large=i原创 2017-03-05 13:39:56 · 266 阅读 · 0 评论 -
动态规划之最长子序列长LCS
只是代码实现,讲解和原理可以看算导的dp部分,也可以看这位的博客,讲的也比较清楚。http://blog.csdn.net/hrn1216/article/details/51534607 #include <iostream> #include <String.h> #define MAXLENGTH 1000 using namespace std; int...原创 2017-03-05 13:36:27 · 400 阅读 · 0 评论