学习日记
YSLearner
这个作者很懒,什么都没留下…
展开
-
左神算法学习日记——单链表(一)
最近在找实习工作,做个左神算法的学习日记,方便以后鄙视自己。题一:判断一个链表是否为回文结构【题目】给定一个链表的头节点head, 请判断该链表是否为回文结构。例如:1->2->1, 返回true。1->2->2->1, 返回true。15->6->15, 返回true。1->2->3, 返回false。进阶:如果链表...原创 2019-04-13 13:39:35 · 236 阅读 · 0 评论 -
左神算法学习日记——搜索二叉树使用方法
class edge{public: int positon; int height; bool ifup; edge() = default; edge(int p, int h, bool dir) { positon = p; height = h; ifup = dir; }};//给定一堆楼的位置参数与其高度即[startpositoon,endpos...原创 2019-05-04 14:10:17 · 238 阅读 · 0 评论 -
左神算法学习日记——树dp
树dp问题只需要考虑每个结点的所有孩子的情况就可以解决class Node{public: int num; Node* left; Node* right; Node() = default; Node(int n) { num = n; } ~Node() { queue<Node*> del; Node* temp; del.push...原创 2019-05-04 20:10:00 · 186 阅读 · 0 评论 -
左神算法学习日记——前缀树
前缀树的实现#include<iostream>#include<string>#include<vector>#include<unordered_map>#include<unordered_set>using namespace std;class node{public: int pass; int ...原创 2019-04-20 09:25:13 · 228 阅读 · 0 评论 -
左神算法学习日记——LRU数据结构设计
template <typename K, typename V>class Node{public: K key; V value; Node<K, V>* next; Node<K, V>* last; Node() = default; Node(K k, V v) { key = k; value = v; next =...原创 2019-05-05 17:13:48 · 396 阅读 · 0 评论 -
左神算法学习日记——动态规划进阶
给定一个数组,通过给数组中每一个数一个整数倍的值,求和为aim的所有可能性。int recMonnum(vector<int>& arr, int index, int aim){ if (index == arr.size())//当aim被减为0时,说明当前策略符合要求 return (aim == 0 ? 1 : 0); int res = 0; for ...原创 2019-05-08 14:12:34 · 797 阅读 · 1 评论 -
左神算法学习日记——单调栈
单调栈,一种可以找到左右边界的数据结构//利用单调栈找到一个数的左边最近的比他小的数(左边界)和右边最近的比他小的数(右边界)int maxhist(vector<int> hist){ stack<int> max; int res = INT_MIN; for (int i = 0; i < hist.size(); i++) { //栈从...原创 2019-04-30 11:08:39 · 602 阅读 · 0 评论 -
左神算法学习日记——morrish
#include "stdafx.h"#include<algorithm>#include<numeric>#include<iostream>#include<set>#include<vector>#include<map>#include<stack>#include<queue...原创 2019-04-30 20:44:02 · 185 阅读 · 0 评论 -
左神算法学习日记——LFU(最近最少被使用)
一个能够使set和get操作的时间复杂度为O(1),敲代码都需要事先将所有可能性考虑清楚,然后是扣清楚队列的边界,以防出错。template<class K, class V>class Node{public: K key; V value; int time;//为了能够判断该节点是否被经常使用 Node<K, V>* up;//为了实现时间复杂...原创 2019-05-06 19:59:49 · 559 阅读 · 3 评论 -
左神算法学习日记——计算表达式结果
写代码过程中应该把代码意义写出来,理清思路,发现边界条件。void calelem(deque<string>& que,int pre)//这个部分一直出错,因为没有考虑清楚pre是第一个字符和之前字符是加减号时该怎么处理,这时应该直接放入队列{ if (!que.empty()) { string temp = que.back(); if (temp...原创 2019-05-07 12:02:10 · 180 阅读 · 0 评论 -
左神算法学习日记——子数组最大异或和
求子数组最大异或和,要求时间复杂度为O(n)class Node{public: Node() { next[0] = NULL; next[1] = NULL; } //构造之前所有异或和的前缀树 void addnum(int num) { Node* trytree = this; for (int i = 31; i >= 0; i--)//应该...原创 2019-05-07 17:27:53 · 899 阅读 · 0 评论 -
左神算法学习日记——并查集
并查集实现#include<vector>#include<hash_map>using namespace std;class unionfinset{private: hash_map<char, char> father; hash_map<char, int> size;public: unionfinset() ...原创 2019-04-19 17:32:34 · 350 阅读 · 0 评论 -
左神算法学习日记——二叉树(三)
在二叉树中找到一个节点的后继节点【题目】现在有一种新的二叉树节点类型如下:public class Node { public int value; public Node left; public Node right; public Node parent; public Node(int data)...原创 2019-04-18 21:08:07 · 209 阅读 · 0 评论 -
左神算法学习日记——单链表(二)
将单向链表按某值划分成左边小、 中间相等、 右边大的形式【题目】给定一个单向链表的头节点head, 节点的值类型是整型, 再给定一个整数pivot。 实现一个调整链表的函数, 将链表调整为左部分都是值小于pivot的节点, 中间部分都是值等于pivot的节点, 右部分都是值大于pivot的节点。 除这个要求外, 对调整后的节点顺序没有更多的要求。例如: 链表9->0->4->...原创 2019-04-13 15:56:58 · 385 阅读 · 0 评论 -
左神算法学习日记——堆(三)
随时找到数据流的中位数【题目】有一个源源不断地吐出整数的数据流, 假设你有足够的空间来保存吐出的数。 请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。【要求】1. 如果MedianHolder已经保存了吐出的N个数, 那么任意时刻将一个新数加入到MedianHolder的过程, 其时间复杂度是O(logN)。2. 取得已经...原创 2019-04-17 14:24:48 · 278 阅读 · 0 评论 -
左神算法学习日记——堆(一)
一直觉得赫夫曼树没什么diao用,没想到这道题可以用赫夫曼树,而且用小根堆可以实现赫夫曼树,学到好多。题目二一块金条切成两半, 是需要花费和长度数值一样的铜板的。 比如长度为20的金条, 不管切成长度多大的两半, 都要花费20个铜板。 一群人想整分整块金条, 怎么分最省铜板?例如,给定数组{10,20,30}, 代表一共三个人, 整块金条长度为10+20+30=60.金条要分成10,2...原创 2019-04-17 15:14:18 · 147 阅读 · 0 评论 -
左神算法学习日记——递归和动态规划
#include<iostream>#include<string>#include<vector>#include<map>#include<stack>#include<queue>#include<algorithm>#include<xfunctional>#include&l...原创 2019-04-26 12:51:49 · 257 阅读 · 0 评论 -
左神算法学习日记——桶排序的应用
给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时间复杂度O(N), 且要求不能用非基于比较的排序。int bucket(int num, long max, long min, int len){ return ((num-min)*len / (max - min));//将len个数均匀的分到len+1个桶中}int bigdif(vector<lon...原创 2019-04-26 14:21:36 · 164 阅读 · 0 评论 -
左神算法学习日记——单链表(三)
复制含有随机指针节点的链表【题目】一种特殊的链表节点类描述如下:public class Node {public int value;public Node next;public Node rand;public Node(int data) {this.value = data;}}题目十三Node类中的value是节点值, next指针和正常单链表中next指针的...原创 2019-04-14 22:21:15 · 128 阅读 · 0 评论 -
左神算法学习日记——堆(二)
#include<iostream>#include<string>#include<vector>#include<map>#include<time.h>#include<queue>#include<algorithm>#include<xfunctional>using nam...原创 2019-04-17 16:56:21 · 142 阅读 · 0 评论 -
左神算法学习日记——manacha
一个时间复杂度为O(n)的求字符串最长回文长度的算法string manacha(string s){ string res(2 * s.size() + 1, '#'); int j = 0; for (int i = 0; i < res.size(); i++) { if ((i & 1) == 1) res[i] = s[j++]; } ret...原创 2019-04-26 22:14:03 · 234 阅读 · 0 评论 -
左神算法学习日记——图
图的各种基础算法head.h#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<unordered_map>#include<unordered_set>#include&l...原创 2019-04-22 20:31:43 · 817 阅读 · 1 评论 -
左神算法学习日记——二叉树(一)
二叉树遍历,非递归版#include<iostream>#include<string>#include<vector>#include<map>#include<stack>#include<queue>#include<algorithm>#include<xfunctional&g...原创 2019-04-18 16:40:09 · 184 阅读 · 0 评论 -
左神算法学习日记——子数组问题,约瑟夫问题,正则表达式
算法学习了一段时间了,算法题有数学题,有找规律的题像第二个子数组题和约瑟夫问题,有递归动态规划这种猛找所有可能性的题,不过所有题都必须扣清楚边界,不然就有可能出错,算法题考逻辑思维,考细致性,我差远了。一个数组中全是正数,求子数组和等于aim的最长子数组长度int maxlen(vector<int> arr,int aim){ int i = 0; int j = 0;...原创 2019-05-11 17:33:13 · 228 阅读 · 0 评论