单调栈问题 当新元素比栈顶元素小或等于时,直接入栈;否则,一直从栈顶弹出元素,直到栈顶元素小于新元素或栈为空。当新元素比栈顶元素大时,一直从栈顶弹出元素,直到栈顶元素大于新元素或栈为空,然后将新元素入栈。因为可以循环,直接将数组进行拼接,这样就破解循环问题了,就如同前面的每日温度问题了。先找到和 nums1 对应的 nums2 数,找到后,在循环找更大的,找到就退出。我们可以先对 nums2 进行单调栈,找到他每个元素的的下一个更大的数。单调栈的核心原理是:在栈内保持元素的单调性(递增或递减)
回溯算法精讲 其实组合问题,最经典就是77题的组合,其他题型无非就是在此基础上加入了路径的值,或者不能重复。怎么去重?去什么的重?树枝上?还是同一树层?怎么使用visited,来判断是否经历过这个节点?// used[i - 1] == true,说明同一树枝candidates[i - 1]使用过// used[i - 1] == false,说明同一树层candidates[i - 1]使用过组合问题最基础还是77题,基本都是在此基础上的衍生。return;i<=n;i++)// 不能重复选择。
c++高级语言专题(一) 面向对象编程:就是属于吧构成问题的各个事物分解成各个对象,建立对象不是为了完成一个步骤,而是为了描述一个事物在整个解决问题的步骤中的行为。当我们把一个数据成员的存储类型指定为静态类型时,则该类产生的所有对象其静态成员均共享一个存储空间,这个空间时在编译的时候分配的。一个类作为宁一个类的友元,意味着,这个类的所有成员函数都是宁一个类的友元函数,都可以进行访问。析构函数:在对象生命周期结束时,释放系统为对象所分配的空间,即撤销一个对象。类是对象的抽象,而对象是类的具体实例。对象的类型称为类(class)。
c++语言三块核心内容(非常高级) 编译过程中,符号是不分配虚拟地址的。符号的重定向;符号原本是没有地址的,但是符号解析成功后,我们就需要堆所有符号进行分配虚拟地址,这就叫做重定向。符号什么时候分配虚拟地址?在连接过程:符号解析完成后。
windows高级开发网络编程的秘密(详细罗列) 网络结构的标准模型是OSI模型,由国际互联网标准化组织定义的网络分层型。虽然目前没有完全按照这种模型实现的网络协议栈。什么是协议栈?一个网络上运行的网络规则。通过协议栈的不同可以划分为不同层。
简单排序的那些事儿(c++详细讲解) 选择排序从数组的第一个元素开始,假设它已经是最小值。:在剩余未排序的元素中(从第二个元素开始),找到最小元素的索引。:将找到的最小元素与数组的第一个元素交换位置。此时,数组的前两个元素已经是最小的两个元素。:将数组的起始位置向后移动一位(即从第二个元素开始),重复步骤2和步骤3,直到整个数组排序完成。:选择排序每次遍历都能找到最小(或最大)的元素,但是它不会直接放在正确的位置上,而是通过交换的方式逐步移动到正确的位置。
c++那些你不知道的标准特性(非常重要) auto 将变量的类型和初始值绑定在一起,而 decltype 将变量的类型和初始值分开;虽然 auto 的书写更加简洁,但 decltype 的使用更加灵活。我们定义了一个MyVector类,它包含一个std::vector类型的成员变量data,并定义了一个自定义类型的迭代器iterator。
二叉树算法 一: 二叉树基础1.1 二叉种类1.1.1 满二叉树满二叉树:就是所有节点要么为0要么为21.1.2 完全二叉树完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。因为,需要顺序,先左后右1.1.3 二叉搜索树二叉搜索树是一个有序树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右