3 守护荆棘

尚未进行身份认证

我要认证

希望能见证自己从弱到强

等级
TA的排名 7w+

平衡二叉树构建及递归和非递归遍历树实现(c++)

最近面试被问到平衡二叉树的性质及手撕构建平衡二叉树。当时无从下手,翻看牛客网面经,发现是一个常考点。虽然代码量相对较多,但确实是必须要掌握的知识。记录如下:性质:1、平衡二叉树其左右子树都为平衡二叉树,且树的深度的绝对值不会超过1;2、将平衡因子(BF)定义为,其左子树的深度减去右子树的深度,则只会有-1,0,1三种情况;3、平衡二叉树属于二叉搜索树(BST),也满足二叉搜索树的一些性质:左子树和右子树都是二叉搜索树。左子树所有节点值都小于等于其根节点值,右子树所有节点的值都大于等于其根节点的值;

2020-07-10 14:21:47

几种常见的排序算法实现(C++)

记录了冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序和归并排序的实现。#include<iostream>#include<vector>using namespace std;void bubbleSort(vector<int> &s) { for (int i = s.size(); i > 0; i--) { for (int j = 1; j < i; j++) if (s[j - 1] > s[j]

2020-07-04 10:26:39

合并两个有序链表(递归和非递归方法C++)

利用递归和非递归方法合并两个有序链表:注意点:1、代码中以输入的方式生成两个链表,在生成完毕第一个链表之后要将cin的内容清空。不然会引起第二个链表无法输入生成的问题。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatList(

2020-07-02 13:15:49

判断链表是否有环,入口节点以及环的大小(C++)

这篇博客对上述问题有详细的解释:判断链表中是否有环 ----- 有关单链表中环的问题这里只做C++的一个代码实现,主要包含构建环形链表,判断是否有环以及环的大小。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatCircularL

2020-07-01 09:48:45

有关链表的一些基本操作(C++)

记录下有关链表的一些基本操作,包括创建链表,打印链表,链表长度,找到指定节点,插入节点,删除节点,反转链表,找到中间节点和链表排序。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatList() { Node* head = ne

2020-07-01 08:51:24

大话设计模式之策略模式C++实现

博客中的例题及构建思想均来自于程杰老师的“大话设计模式”。策略模式和简单工厂模式在实现上没有太大的区别。策略模式相对于工厂模式最大的优点就是将各个算法策略都进一步封装在了Context对象中。客户端只需要认识一个类Context就行了,进一步降低了耦合度。实现商场打折促销:(简单工厂和策略模式)#include<iostream>using namespace std;class CashSuper {public: virtual double acceptCash(doub

2020-06-30 09:57:29

大话设计模式之简单工厂模式C++实现

博客中的例题及构建思想均来自于程杰老师的“大话设计模式”。通过封装,继承,多态把程序的耦合度降低,使得程序更加灵活,易于修改且易于重复。考虑一个用单独的类来创造实例的过程,这就是工厂。实现简单的四则运算过程:#include<iostream>using namespace std;class Operation {private: double _NumA; double _NumB;public: void SetNumA() { cout << "

2020-06-29 13:05:11

c++利用栈实现队列和利用队列实现栈

c++利用栈实现队列和利用队列实现栈#include<iostream>#include<stack>#include<queue>using namespace std;class Queue {public: void pop() { if (data1.empty()) { cout << "queue is null" << endl; return; } while (!data1.empty()

2020-06-23 12:14:19

c++实现批量修改文件名及文件的归档移动

最近接到一个小任务,需要对150人的文档进行分类汇总,每个人有两个文件。最终需要将每个人的两个文件新建一个文件夹进行单独存放。就尝试用C++代码批量处理了一波,记录如下:一、问题分析:1、由于每个文件是每个学生提交,因此最终的文档呈现各种不规范的命名方式。2、有的学生存在学号写错的情况。二、解决想法及流程:1、批量修改文件名,统一化命名方式;2、程序自动检查同一个人的两个文件名中的学号是否一致,抛出信息,手动核查;3、自动新建个人文件夹,并将个人的两个文件移动到该文件下;4、反向校验,将归档

2020-06-23 10:31:03

Leetcode学习笔记(974. 和可被 K 整除的子数组)

前缀和,注意c++取模被除数为负数情况,要进行调整:class Solution {public: int subarraysDivByK(vector<int>& A, int K) { int out = 0; unordered_map<int ,int> data; data[0]=1; int sum = 0; for(size_t i=0;i<A.size();i+.

2020-05-27 19:00:23

Leetcode学习笔记(24. 两两交换链表中的节点)

用栈进行替换:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* swapPairs(ListNode* head) { if (head == nullptr |.

2020-05-25 22:17:13

Leetcode学习笔记(146. LRU缓存机制)

这道题算法方面倒不是难点,主要在于类和数据结构额设计,如何高效合理。struct DListNode{ int key, value; DListNode* pre; DListNode* next; DListNode():key(0),value(0),pre(nullptr),next(nullptr){} DListNode(int _key, int _value):key(_key),value(_value),pre(nullptr),next(nu.

2020-05-25 19:00:07

Leetcode学习笔记(29. 两数相除)

递归加移位思想,困住我的竟然是边界溢出值,要哭了:class Solution {private: int function(long num, long divisor) { if (num<divisor) return 0; long long time = 1; long long temp = divisor; while (num >= temp) { temp = temp << 1; time = time << .

2020-05-24 22:08:01

Leetcode学习笔记(22. 括号生成)

递归调用:1、function函数中的string参数需要定义成const引用;class Solution {private: vector<string> out; void function(const string &solution, int left, int right, int n){ if(right == n && left == n){ out.push_back(solution);.

2020-05-24 20:50:38

Leetcode学习笔记(12. 整数转罗马数字)

class Solution {public: string intToRoman(int num) { string Roman[13] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; int data[13] = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; string out; int start = 0;.

2020-05-24 20:08:01

Leetcode学习笔记(76. 最小覆盖子串)

滑动窗口加HASH表:class Solution {private: map<char, int> data; bool check(map<char, int> &data) { map<char, int>::iterator it; for (it = data.begin(); it != data.end(); it++) { if (it->second > 0) return false; } r.

2020-05-23 21:15:35

PCL库学习笔记(为点云上色的几种方法详解)

近段时间在学习PCL库,在点云上色的问题中进行了一个小总结。分别实现了一下几个功能:1. 显示点云自带的颜色信息;2. 根据点云的某个属性进行上色(例如:X,Y,Z等方向上不同颜色);3. 自定义单一颜色(给某个点云显示同一个颜色);4. 随机上色(由编译器随机给点云分配单一颜色);5. 显示点云的法线方向和法向量;下文会分别介绍上述功能的实现,并提供代码示例:1、显示点云自带的颜色信息(PointCloudColorHandlerRGBField)boost::shared_ptr<

2020-05-23 15:25:50

PCL库学习笔记(一个窗口同时显示多个点云和依次显示不同点云)

本文利用 PCLViewer 类实现对点云的可视化,并描述两种情况的代码实现:一个窗口同时显示多个点云和依次显示不同点云。这两个要求其实在很久之前利用PCL库工具时就遇到过,能够大大简化当时的工作量。但是没有精力和耐心对其中原理进行探究。这次的系统学习,强迫自己进行了较深入的了解,记录如下:首先认识三个函数:boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::

2020-05-22 23:28:31

PCL库学习笔记(PCL Visualizer)

本文展示了PCL Visualizer的几种基本用法。代码的主体是点云库提供的源代码。由于其是由cmake进行编译,有输入参数的选择问题。为了方便VS的调试运行过程,将其中的输入接口进行了修改:代码中学习到的几个知识点:1、int main( int argc, char* argv[] ) 中arg和argv参数的含义;参考博客:https://blog.csdn.net/dgreh/article/details/809859282、注意RGB合成的原理uint32_t rgb = (stat

2020-05-22 20:48:08

Leetcode学习笔记(5. 最长回文子串)

两种情况考虑,反向思维:class Solution {public: string longestPalindrome(string s) { if (s.size() <= 1) return s; int mid = 0; int max_length = 1; for (int i = 0; i<s.size() - 1; i++) { int temp1 = funt(s, i, i); int temp2 = funt(s, i, i + 1.

2020-05-21 13:19:05

查看更多

勋章 我的勋章
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 原力探索 · S
    原力探索 · S
    在《原力计划【第二季】》打卡挑战活动中,发布 12 篇原创文章参与活动的博主,即可获得此勋章。(本次活动结束后统一统计发放)
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取