
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
单例模式:顾名思义,这个对象是全局的,且只有唯一的一个实例(不能创建出两份)。用途:多个线程同时访问一个全局资源时可能会用到。例如,在C++的内存管理中,内存池只有一份,但是会有多个线程访问内存池,那么内存池的设计就可能需要单例模式。所以单例模式还是比较重要的。

这是我昨天看到的一个很有意思的题目,大家知道答案嘛?可以把自己的答案写在评论区。咱们先设置一个悬念,在本文的结尾我会公布答案\(0^◇^0)/宏定义类似于函数定义,也有类似于传参的过程。给大家举个栗子:这段代码就是最简单的宏定义,在#define的语句中Add中的x,y相当于参数。在printf语句中,a相当于x,b相当于y。那么Add(a,b)就相当于a*b。那如果我们要打印4*Add(a+1,

因为建小堆的话,数组第一个数就是最小的,而我要升序排列,那么第一个数直接就排好了,不需要调整。我们必须从第二个数开始调整堆,但此时数据之间的关系全都乱套了,无法向上或向下调整恢复堆的特性,只能重新建堆,而建堆的代价是很大的,时间复杂度是O(n*logn)。让根结点与最后一个子结点交换,那么最大的数就排好了,再让交换后的堆向下调整,此时根结点就是次大的数,和倒数第二个子节点交换,那么次小的数就排好了

固定一个数b,然后定义两个指针left和right,分别从两端遍历数组,如果这四个数大于目标值则right--。在做个题目前强烈建议大家先看看我的上一篇博客:有效三角形个数,看完之后再去leetcode上写一写三数之和,搞懂那两个题目之后再来看这道题目就比较容易了。首先我们需要把这个数组排一下序,然后固定一个数a,然后在剩下的区间利用三数之和的思路解决。这道题目十分困难,在leetcode上的通过

然后固定最大的数,定义一个左指针和右指针从数组的两边开始遍历。如果左右指针对应的数之和大于另一个较大的数,那么左指针右边的数与右指针的数之和一定大于那个较大的数。如果左右指针数字之和不大于另一个较大的数,则左指针往右移动一位。那么只需要判断a+b>c是成立的,那么这三个数就一定能构成三角形。我们都知道,判断三个数能否构成三角形需要判断三次:任意两个数之和大于第三个数。可想而知,这种解法的时间复杂度

有两种方法:第一种:暴力穷举法,就是用两次循环将所有的可能性算出来,然后求出最大值。这种方法最容易想到,但时间复杂度是O(n^2),一定会超时的!第二种:仔细观察题目特点,任意两条线之间的体积=短的那条线*两条线之间的距离。例如数组{2,3,8,1,7,6}。2和6之间的距离=2*5。根据体积的计算特点,对于2来说,它和其他数字之间的体积一定小于2和6之间的体积,所以这些情况就可以直接舍掉,最大体

基类指针指向子类对象时,析构函数就是普通的函数调用,指针是父类的就会调用父类的析构函数,但子类的那一部分并没有析构,可能会内存泄漏。子类析构函数完成对父类析构函数的重写,通过父类指针调用析构函数时,满足多态语法。指针指向父类就调用父类的析构,指向子类就调用子类的析构,不会存在内存泄漏的风险。重载是两个函数在同一作用域中,函数名相同但参数不同。重写就是在继承体系中,派生类虚函数完成对基类虚函数的重写








