2 镇天雷帝

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 38w+

leetcode之96.不同的二叉搜索树

文章目录题解代码给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1

2020-07-12 19:02:13

算法之动态规划流程

文章目录写动态规划,先想暴力递归尝试,然后避免重复计算进行优化,所以当没有重复计算的时候很难改成动态规划,避免重复计算 我们要找那些值是不被依赖的,找到固定状态,用空间换时间,记录下来 不要重复计算。分析可变参数,哪几个可变参数的值能代表返回状态,几个可变参数,就构造几维表。然后去看basecase确定表中固定不变的值,再看位置依赖写出动态规划(看你是怎么调动递归的)...

2020-07-12 18:17:14

leetcode之面试题16.04.井字游戏

文章目录题目思路代码设计一个算法,判断玩家是否赢了井字游戏。输入是一个 N x N 的数组棋盘,由字符" ",“X"和"O"组成,其中字符” "代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" “)中。第一个玩家总是放字符"O”,且第二个玩家总是放字符"X"。"X"和"O"只允许放置在空位中,不允许对已放有字符的位置进行填充。当有N个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,对应该字符的玩家获胜。当所有位置非空时,也算为游戏结束。如果游戏结束,玩家不允许再放置字符

2020-07-12 10:33:24

leetcode之1480

文章目录解题思路代码1480. 一维数组的动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1,

2020-07-11 16:14:18

C++之python和Lua脚本语言

文章目录PythonLuaC++ 高效、灵活,但开发周期长、成本高,在混合系统里可以辅助其他语言,编写各种底层模块提供扩展功能,从而扬长避短;pybind11 是一个优秀的 C++/Python 绑定库,只需要写很简单的代码,就能够把函数、类等 C++ 要素导入 Python;Lua 是另一种小巧快速的脚本语言,它的兼容项目 LuaJIT 速度更快;使用 LuaBridge 可以导出 C++ 的函数、类,但直接用 LuaJIT 的 ffi 库更好;使用 LuaBridge 也可以很容易地执行 L

2020-07-10 18:53:12

C++之socket

文章目录libcurl:高可移植、功能丰富的通信库cpr:更现代、更易用的通信库ZMQ:高效、快速、多功能的通信库libcurl 是一个功能完善、稳定可靠的应用层通信库,最常用的就是 HTTP 协议;cpr 是对 libcurl 的 C++ 封装,接口简单易用;libcurl 和 cpr 都只能作为客户端来使用,不能编写服务器端应用;ZMQ 是一个高级的网络通信库,支持多种通信模式,可以把消息队列功能直接嵌入应用程序,搭建出高效、灵活、免管理的分布式系统。我们知道了数据或者对象的序列化,现在,

2020-07-10 18:24:26

C++之序列化

文章目录序列化和反序列化JSONMessagePackProtoBuffer小结:JSON 是纯文本,容易阅读,方便编辑,适用性最广;MessagePack 是二进制,小巧高效,在开源界接受程度比较高;ProtoBuffer 是工业级的数据格式,注重安全和性能,多用在大公司的商业产品里。序列化和反序列化序列化,就是把内存里“活的对象”转换成静止的字节序列,便于存储和网络传输;而反序列化则是反向操作,从静止的字节序列重新构建出内存里可用的对象。接下来,我就和你介绍三种既简单又高效的数据

2020-07-10 17:37:17

C++之多线程和并发

文章目录什么是并发,多线程?认识线程和多线程什么是并发,多线程?通俗地说,“并发”是指在一个时间段里有多个操作在同时进行,与“多线程”并不是一回事。并发有很多种实现方式,而多线程只是其中最常用的一种手段。不过,因为多线程已经有了很多年的实际应用,也有很多研究成果、应用模式和成熟的软硬件支持,所以,对这两者的区分一般也不太严格,下面我主要来谈多线程。认识线程和多线程要掌握多线程,就要先了解线程(thread)。线程的概念可以分成好几个层次,从 CPU、操作系统等不同的角度看,它的定义也不同。今天,

2020-07-10 14:20:43

C++之C++算法

文章目录认识迭代器手写循环的替代品排序算法查找算法算法是专门操作容器的函数,是一种“智能 for 循环”,它的最佳搭档是 lambda 表达式;算法通过迭代器来间接操作容器,使用两个端点指定操作范围,迭代器决定了算法的能力;for_each 算法是 for 的替代品,以函数式编程替代了面向过程编程;有多种排序算法,最基本的是 sort,但应该根据实际情况选择其他更合适的算法,避免浪费;在已序容器上可以执行二分查找,应该使用的算法是 lower_bound;list/set/map 提供了等价的

2020-07-09 19:34:54

C++之容器

文章目录容器的通用特性容器的具体特性顺序容器按照存储结构,这 5 种容器又可以再细分成两组。优缺点有序容器无序容器重点:容器其实就是一种数据结构;用来存储数据的容器,其实就是 C++ 对数据结构的抽象和封装。标准容器可以分为三大类,即顺序容器、有序容器和无序容器;所有容器中最优先选择的应该是 array 和 vector,它们的速度最快,开销最低;list 是链表结构,插入删除的效率高,但查找效率低;有序容器是红黑树结构,对 key 自动排序,查找效率高,但有插入成本;无序容器是散列表结构,

2020-07-09 18:27:03

C++之string

文章目录原始字符串字符串转换函数正则表达式简单小结一下今天的内容:C++ 支持多种字符类型,常用的 string 其实是模板类 basic_string 的特化形式;目前 C++ 对 Unicode 的支持还不太完善,建议尽量避开国际化和编码转化,不要“自讨苦吃”;应当把 string 视为一个完整的字符串来操作,不要把它当成容器来使用;字面量后缀“s”表示字符串类,可以用来自动推导出 string 类型;原始字符串不会转义,是字符串的原始形态,适合在代码里写复杂的文本;处理文本应当使用正则

2020-07-09 11:13:11

c++之lambda函数式编程

文章目录认识 lambda使用Lambda函数的好处使用 lambda 的注意事项2.lambda 的变量捕获3.泛型的 lambda关键词:闭包;总结:形式 auto f1 = [](){}; // 相当于空函数,什么也不做可以匿名使用vector<int> v = {3, 1, 8, 5, 0}; // 标准容器cout << *find_if(begin(v), end(v), // 标准库里的查找算法 [](int x)

2020-07-09 10:12:44

C++之异常处理(如何利用异常)

文章目录为什么要有异常?异常的用法和使用方式为什么要有异常?归根到底,异常只是 C++ 为了处理错误而提出的一种解决方案,当然也不会是唯一的一种。在 C++ 之前,处理异常的基本手段是“错误码”。函数执行后,需要检查返回值或者全局的 errno,看是否正常,如果出错了,就执行另外一段代码处理错误:int n = read_data(fd, ...); // 读取数据if (n == 0) { ... // 返回值不太对,适当处理}if (e

2020-07-09 09:22:22

C++之智能指针 unique_ptr 和 shared_ptr

文章目录一、unique_ptrC++指针没有只能算是一个小垃圾回收站,因为java,go都有一个专门的垃圾回收机制,无用指针会直接回收,C++只能通过析构函数等自己写,释放无用指针,累。智能指针就是代替你来干这些“脏活累活”的。它完全实践了 RAII,包装了裸指针,而且因为重载了 * 和 -> 操作符,用起来和原始指针一模一样。不仅如此,它还综合考虑了很多现实的应用场景,能够自动适应各种复杂的情况,防止误用指针导致的隐患,非常“聪明”,所以被称为“智能指针”。常用的有两种智能指针,分别是 u

2020-07-08 21:05:53

C++之引用&

文章目录C++ 引用引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++ 引用 vs 指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。...

2020-07-08 19:53:49

C++之const和volatile

文章目录一、constconst基本用法与类相关的 const 用法关键字 mutable在看const的内容之前 大家要记住一件事,我总结所有的形式,那就是const离谁最近,它是针对谁的。比如const int * p = &name;那么它针对的就是int,所以*p = 10;就是错误操作而 p = &class;就是正确操作而int* const p = &name;它针对的就是p ;所以 p = &name就是错误操作;而 *p = 10就是正确操作

2020-07-08 19:34:04

C++之unordered_map使用从浅入深

文章目录一、简介二、插入(添加)键值对三、取值四、判空五、容量六、删除七、清空八、交换九、顺序比较十、查找十一、迭代器十二、遍历一、简介unordered_map是一种无序映射,key值是无序的,内部结构使用的是哈希表,存储的是<key, value>键值对,每次存储的都是一对一对的,而在查询的时候 只能通过key是否存在进行查找,不能同过value的值进行查找unordered_map内部是用哈希表实现,通过特殊的函数把Key值映射到哈希表中的一个位置来访问记录,查找时间复杂度可达到O(

2020-07-07 13:56:18

c++中vector动态数组用法

文章目录一、定义及初始化二、赋值(assign)三、获取长度(size)四、改变大小(resize)五、数组访问六、添加元素(push_back、insert)七、删除元素(pop_back、erase、remove)八、交换和反转(swap、reverse)九、排序(sort)十、清除和空判断(clear、empty)本文以int类型为例,其他类型大同小异使用vector数组时,需包含< vector>头文件同一功能中的不同函数独立编程,即调用后一函数时前一函数运行结果复原。(已用空行隔

2020-05-27 10:12:01

算法之选择排序

简单来说,选择排序就是你在每次执行某次选择循环的时候,先从未排序的部分选出一个最大(或者最小的数),当有比它大(或者比它小)的数就进行替换,然后按照你的要求是升序还是降序,然后和未排序的首元素进行交换**(记住一定是交换位置,如果你直接放置的话,会导致原来数组的元素缺失)**那么选择排序稳定吗?答案是不稳定。为什么?比如 5,8,5,2,9 这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素 2,与第一个 5 交换位置,那第一个 5 和中间的 5 顺序就变了,所以就不稳定了。正是因此,相对于冒

2020-05-23 16:51:51

算法之插入排序

首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。如图所示,要排序的数据是 4,5,6,1,3,2,其中左侧为已排序区间,右侧是未排序区间。代码如下:#include <iostream>#include <vector>using namespac

2020-05-23 09:21:13

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。