C++
就叫温华啦
这个作者很懒,什么都没留下…
展开
-
左神基础班-拷贝有随机指针的链表
这是是实现的方法。LinkNode* copyLink(LinkNode* head){ unordered_map<LinkNode*,LinkNode*> map; LinkNode* go= head; LinkNode* head_copy = new LinkNode(0); LinkNode* copy_go = head_copy; //第一...原创 2019-03-20 10:48:07 · 165 阅读 · 0 评论 -
leetcode链表专题- 移除但链表的倒数第n个节点
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* r...原创 2019-03-22 09:15:31 · 109 阅读 · 0 评论 -
leetcote链表专题- 移除链表中的所有目标元素值
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* r...原创 2019-03-22 09:16:55 · 100 阅读 · 0 评论 -
leetcode链表专题 oddEvenList 奇偶链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* o...原创 2019-03-22 09:17:57 · 260 阅读 · 0 评论 -
leetcode 链表专题 -判断是否为回文链表
#include<iostream>using namespace std; //Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; cl...原创 2019-03-22 09:18:50 · 393 阅读 · 0 评论 -
左神基础班- 数据流一直来-判断所有数据的中位数
生成两个堆:大根堆 和小根堆。第一个数 默认放入大根堆。然后一直有数进来,按照以下逻辑放入两个堆中:把进来的数和大根堆的堆顶比较,如果比堆顶小(=),则放进大根堆中。如果比堆顶大,则放入小根堆。每次放入都要检查 当前两个堆得 size的绝对值是否小于等于1, 如果大于一,则把size较大的堆弹出一个元素加入到另外一个堆中。#include<iostream>...原创 2019-03-22 11:55:17 · 260 阅读 · 0 评论 -
左神基础班 - prim算法 生成 最小生成树
思想:先随便加入图中的某一个节点和其所连通的边,把节点放在一个哈希集合中,边放入以权重为大小比较对象的最小堆中。然后每次都从最小堆中弹出一个边,我们考察这条边的所连接的to 节点 是否已经被访问过了,1。如果已经访问过,这条边我们就不要了,因为要了的话 ,要么是该边又重新被考虑,要么该边的加入会导致环。 2. 如果该节点没有被访问过,那说明这条边是没问题的,我们直接加入这条边进入解...原创 2019-03-26 10:02:40 · 289 阅读 · 0 评论 -
左神基础班- 序列化-反序列化一棵树
(非递归)序列化方法:每个节点值之间用'_' 分隔开。然后空位置用'#'表示string getTreeWithSerial(TreeNode* head){ if(head == nullptr){ return "#_"; } char c[8]; sprintf(c,"%d",head->value); string s = c; s = s+ '_'; ...原创 2019-03-26 12:31:53 · 200 阅读 · 0 评论 -
左神基础班-切金条
#include<iostream>#include<queue>using namespace std;template<class T>int getLength(T& arr);int main(){ priority_queue<int,vector<int>,greater<int> &g...原创 2019-03-22 18:28:08 · 181 阅读 · 0 评论 -
左神基础班- 二叉树的递归 非递归遍历
先是递归的三种:void preOrderPrint(TreeNode* head){ if(head == nullptr){ return ; } cout << head->value << endl; preOrderPrint(head->left); preOrderPrint(head->right);}void ...原创 2019-03-23 17:41:58 · 172 阅读 · 0 评论 -
左神基础班——折纸问题
coding为什么写,请看左神视频,或者自己拿纸折一下,第一次对折,在折痕上写1 下第二次对折,会在第一个折痕上出现两道折痕, 上面写 2 下,下面的折痕写2上第三次对折吗, 会在所有第二次的折痕上下都出现两道折痕,一样去写。。。。。发现规律。。。。。二叉树#include<iostream>using namespace std;void Fol...原创 2019-03-23 17:46:02 · 420 阅读 · 0 评论 -
左神基础班 - 寻找某一节点中序遍历的下一个节点
有四种情况:1.该节点有右孩子:则取该右孩子的最左孩子节点返回2.该节点无右孩子,但它是父节点的左孩子: 直接返回左孩子3.该节点无右孩子,但他是父节点您的右孩子:一直往上走,直到找到一个节点 ,它是父节点的左孩子4.该节点无右孩子,但他是父节点您的右孩子:一直往上走,但找不到一个节点 ,它是父节点的左孩子,直到走出根节点。#include<iostream&...原创 2019-03-23 17:50:40 · 137 阅读 · 0 评论 -
左神基础班- 在数组中找局部最小值
很好的经验: 二分法并非只能在有序的数组中才能使用,只要你确定某处必有你想要的东西,则可以利用二分法一步步缩小范围查找下去。算法: 先在最左和最右找有没有 局部最小,没有的话,局部最小必定在中间,则缩小范围找下去#include<iostream>using namespace std;int findLocalMin(int arr[],int l, int ...原创 2019-03-23 17:54:12 · 567 阅读 · 0 评论 -
左神基础班 - 并查集
这里要注意,我们有哈希表的时候,自己定义了Node,此时要定义该Node的哈希值怎么计算。#include<iostream>#include<unordered_map>using namespace std;struct Node{ char c; //在并查集的 union_函数中用到了Node类型的比较操作,所以得自己重新定义 bool opera...原创 2019-03-23 22:02:27 · 638 阅读 · 0 评论 -
左神基础班-图的生成、bfs、dfs
生成一张图的前期准备:class Edge;class Node{public: int value; int in; int out; list<Node*> next; list<Edge*> edges; Node(int value){ this->value = value; in = 0; out =0; }};...原创 2019-03-24 16:22:34 · 759 阅读 · 6 评论 -
左神基础班- 判断一颗树是否为平衡二叉树
递归套路:找出所有的可能性 。然后写代码。ResTreeNode* isBalance(TreeNode* head){ //注意 空树是一颗高度为0的平衡二叉树 if(head == nullptr){ return new ResTreeNode(true,0); } ResTreeNode* left_t = isBalance(head->left); if(!...原创 2019-03-27 16:40:34 · 326 阅读 · 0 评论 -
左神基础班 - 数一颗完全二叉树有多少个节点
逻辑,判断当前节点的右子树的最左下角节点是否到达最后一层,若到达最后一层,则说明当前节点的左子树 是一颗,则用公式计算得到总数,然后 对当前节点的右子树 递归求解、若当前节点的右子树 的最左下角节点没到最后一层,则当前 节点的 右子树是完全二叉树, 对左子树递归求解。//当前节点的数,其左子树到最后一次了没?int getHigh(TreeNode* node, int level...原创 2019-03-27 16:45:32 · 693 阅读 · 0 评论 -
leetcode-链表专题- 取两单链表的交叉节点
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *g...原创 2019-03-22 09:14:44 · 184 阅读 · 0 评论 -
左神基础课 - 克鲁斯卡尔算法-生成最小生成树
输入: 一个图结构输出: 最小生成树所在的边集函数内部的逻辑:1.迭代图中的所有顶点,把他们交给并查集。 由于定义时,并查集的输入定义为结构体类型数组,并非指针数组,所以我们把所有节点 转成成 结构体数组的形式,交给并查集进行构造。2.并查集得到所有节点元素, 使每个节点的父指针(用hash map表示)指向自己,且陵每个元素 size =13.把节点中所有的边都放入小顶堆中,...原创 2019-03-25 15:54:01 · 463 阅读 · 4 评论 -
左神基础课 - 拓扑排序
先遍历图中的所有节点,把其入度为零的节点先入队然后进入循环,每次出队一个元素,把该元素所指向节点的入度减1,当发现对应节点减完1后入度为零,则入队list<Node*> sortedTopology(Graph graph){ unordered_map<Node*, int> inMap; queue<Node*> queue; unorder...原创 2019-03-25 12:26:49 · 284 阅读 · 0 评论 -
左神基础班-猫狗队列
#include<queue>#include<iostream>using namespace std;class Pet{private: int type;public: Pet(){ } Pet(int type){ this->type = type; } int getType(){ return type; } v...原创 2019-03-20 10:51:58 · 227 阅读 · 0 评论 -
左神基础班-单链表存储的数,判断回文
先上时间复杂度和空间复杂度都是 O(n)的解法里面的几个函数功能分别为:1.由数组生成链表、2.得到反转后的链表、3.顺序打印链表,4.比较两个链表,若有一处不同,则不是回文。#include<iostream>#include<stack>using namespace std;struct LinkNode{ int value; LinkN...原创 2019-03-19 16:18:00 · 205 阅读 · 0 评论 -
左神基础班-链表的partition
LinkNode* getPartition(LinkNode* head){ LinkNode* tail = head; while(tail->next!=nullptr){ tail = tail->next; } LinkNode* go = head->next; LinkNode* small = nullptr; LinkNode* equal ...原创 2019-03-20 10:58:41 · 316 阅读 · 0 评论 -
左神基础班-randomPool
//等概率返回容器中的东西#include<iostream>#include<unordered_map>#include<ctime>#include<cstdlib>using namespace std;class RandomPool{private: unordered_map<char, int> key2...原创 2019-03-20 11:00:43 · 501 阅读 · 0 评论 -
左神基础班-二维矩阵转圈打印
一个函数: 控制从外围打印一圈另外一个函数控制:打印最外圈,次外圈 、再进去一圈。额。没法描述了~~~~~囧#include<iostream>using namespace std;void myprint(int matrix[][4],int row1,int col1, int row2,int col2);void revolvePrint(int...原创 2019-03-20 11:01:56 · 223 阅读 · 0 评论 -
左神基础班-在行、列是升序的情况下找一个数K
#include<iostream>using namespace std;bool findK(int matrix[][4],int row, int col, int rowC,int colC,int k);int main(){ int matrix[][4]={{1,3,4,10},{2,5,9,11},{6,8,12,15},{7,13,14,16}}; c...原创 2019-03-20 11:03:00 · 256 阅读 · 0 评论 -
左神基础班-两升序链表打印相同值
#include<iostream>using namespace std;struct LinkNode{ int value; LinkNode* next;};LinkNode* getLink(int arr[], int length);void show(LinkNode* head);void showPublic(LinkNode* head1, Li...原创 2019-03-20 11:04:43 · 143 阅读 · 0 评论 -
左神基础班-两个队列模拟栈
#include<queue>#include<iostream>using namespace std;class MyStack{private: queue<char> data; queue<char> help;public: int size(){ return data.size(); } bool push(...原创 2019-03-20 11:07:33 · 194 阅读 · 0 评论 -
左神基础班-两个栈模式队列
#include<iostream>#include<stack>using namespace std;class myQueue{private: stack<char> push_s; stack<char> pop_s;public: void push(char c){ push_s.push(c); } void...原创 2019-03-20 11:08:06 · 134 阅读 · 0 评论 -
左神基础课-‘之’字型打印二维数组
宏观上:主要函数是打印对角线函数,其中有个bool控制是从上往下打印 还是从下往上打印另外一个函数控制是 : 现在打印那条对角线#include<iostream>using namespace std;void zhi_print(int matrix[][3], int row,int col);void line_print(int matrix[][3],in...原创 2019-03-20 11:11:13 · 160 阅读 · 0 评论 -
左神基础课-经典快排
经典快排:把目标值放在中间,左边都是小于等于它的,右边是大于它的值、#include <iostream>using namespace std;int quicksort(int* arr,int L,int R);void swap(int* arr, int i, int j);void show(int* arr, int length);int m...原创 2019-03-21 10:39:51 · 551 阅读 · 0 评论 -
左神基础班-堆排序
#include<iostream>using namespace std;void heapsort(int arr[], int length);void heapinsert(int arr[], int length, int index);void heapify(int arr[], int index, int heapsize);void swap(int...原创 2019-03-21 10:40:10 · 363 阅读 · 0 评论 -
左神基础课-归并排序
先输入一个数: 表示有几个数要排序然后每次输入一个数输出 排序好的数#include <iostream>#include <ctime>#include <stdlib.h>using namespace std;void mergeSort(int* arr,int i, int j);template<class T>...原创 2019-03-21 10:40:17 · 374 阅读 · 0 评论 -
左神基础班-partition
patition: 比目标值小的在左边,比目标值大的再右边,相等的再中间。 两侧的都是乱序#include<iostream>using namespace std;void partition(int arr[],int L, int R);void NB_partition(int arr[],int L, int R);void swap(int arr[]...原创 2019-03-21 10:40:24 · 273 阅读 · 0 评论 -
左神基础班-无序序列中,升序排序后,前后两值之间的最大差值是多少
有n个数,取值范围非常大,导致不能使用桶排序,所以用一个类似于桶的取巧的办法规则:有N个数,则生成n+1个桶,把数的取值范围分为到这n+1个桶中, 遍历n个值,把每个值都放入到对应范围的桶里,从而, 目标要求的差值必定在两桶之间。因此:我们先求每一个桶的最大值与最小值,求好后,再遍历每一个有值得桶,后用一个桶的最小值减去前一个桶的最大值,得到一个差值,最终输出最大的差值...原创 2019-03-21 10:40:30 · 244 阅读 · 0 评论 -
左神基础班- 可能有环可能无环的链表 -判断是否相交
//判断是否有环LinkNode* loop(LinkNode* head){ LinkNode* f = head->next; LinkNode* s = head->next; //注意这边的 && while(f->next != nullptr && f->next->next != nullptr){...原创 2019-03-21 11:23:09 · 223 阅读 · 0 评论 -
左神基础课 - 前缀树
插入:得到待插入字符串的长度,每次从上到下生成节点插入进去(就是相当于尾插法生成链表),但如果我们要生成的节点本来就已经有了,那么我们就直接到下面的节点里去。 在这个步骤的循环中,每次都要把当前节点的pass+1,表示有一个串要经过该节点。 到了最终的尾节点,把end+1;删除:正常是,每次对当前节点进行查询下一个节点的位置,把当前节点的pass-1,然后去到下一个节点,一直走到子串的最后一个...原创 2019-03-24 18:45:44 · 589 阅读 · 0 评论 -
左神基础班 -判断一个二叉树是否为完全二叉树
对一个节点而言有四种可能:1. 当前节点有两个孩子2.当前节点有左孩子 没有右孩子3,当前节点 没有左孩子 有 右孩子4,当前节点 没有孩子我们层次遍历每一个节点,若碰到3的情况 一定不是完全二叉树 ,直接返回,当我们 第一次碰到: 2 或者 4 的情况的时候, 这意味着 我们之后遍历的节点都必须是叶子,否则不是完全二叉树。若程序能执行到结束, 返回 t...原创 2019-03-27 16:48:54 · 433 阅读 · 0 评论