暂时未有相关云产品技术能力~
CSDN博客专家,华为云云享专家,阿里云专家博主,51CTO专家博主,现为推荐算法工程师,研究领域为AI推荐算法、NLP、图神经网络等,发表EI会议论文一篇,CSDN博客访问量破100万。 CSDN博客id:山顶夕景 微信公众号:古道西风瘦码 知识星球:AI算法乐园
给定的升序数组,其实就是BST的中序遍历数组,只是给定一棵二叉树的中序遍历数组,并不能确定一棵二叉树,但是题目要求是严格平衡的二叉搜索树,所以可以选择升序序列的中间元素作为当前的根结点元素。
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如建房子的过程有打地基、筑墙、安装门窗等,但是可以按照用户的不同需求进行建造不同风格的房子。
一般的进制转换题目,只需要对num进行%运算,取得最后一位,然后对num进行/运算(将已经取到的位数去掉),循环直到num为0。一般的进制转换题目都是x在[0, x),即从0开始,满x进一。但是这题是从1开始,所以在进制转换操作前,需要对num进行减1操作,整体偏移,事实上如果漏了减1:
审题看清楚,,题目问的不是回文子串,不是子串!!! 暴力解法会超时,可以使用双指针:
流量特点: 稀缺性:获取流量是有成本的,流量成本:
抽象工厂模式,其抽象程度更高,每一个具体工厂可以生产一组相关的具体产品对象。 抽象工厂模式的定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
如果不考虑用O ( 1 ) O(1)O(1)的空间复杂度,很容易想到这种添加,删除的步骤,可以用到栈的入栈和出栈,所以可以用2个栈模拟2条字符串的退格运算:
当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,
1)使用哨兵节点,省去首个元素的逻辑判断,最后返回dummy->next。 (2)比较cur.next与cur.next.next对应的元素是否相同。
之前的简单工厂模式的最大问题:违背“开闭”原则,每当增加新的产品时,需要修改工厂类的逻辑。工厂方法模式不再使用工厂类统一创建所有的具体产品,而是让每个工厂只生产特定的产品。即让一个类的实例化延迟到其子类。
MongoDB中的用户画像,来自mysql中的用户注册表和用户日志数据(如阅读量、点赞数、收藏数等)。 用户画像和物品画像,物料存入MongoDB中的SinaNews数据库中;这里我们用MongoDB是因为其文档类似于JSON对象,增删字段非常方便。
【Python可视化】绘制学生成绩的雷达图 雷达图,又叫蜘蛛网图、极坐标图。 雷达图相当于平行坐标图,其中轴径向排列。
UML-Unified Model Language 统一建模语言,是在开发阶段,说明、可视化、构建和书写一个面向对象软件的开放方法。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附加信息之用的文本。
知识蒸馏(Knowledge Distillation,KD)是常用的知识迁移方法,通常由教师(Teacher)模型和学生(student)模型构成。知识蒸馏就像老师教学生的过程,将知识从教师模型传递给学生模型,使得学生模型尽量与教师模型接近。
创建型模式描述如何将对象的创建和使用分离,让用户在使用对象过程中无须关心对象的创建细节,从而降低系统耦合度,并且让系统易于修改和扩展。
2.1 现在假设有一个编译好的C++程序,编译没有错误,但是运行时报错,报错如下:你正在调用一个纯虚函数(Pure virtual function call error),请问导致这个错误的原因可能是什么?
和leetcode15三数之和类似,三层循环时间复杂度O ( n 3 ) O(n^3)O(n 3 )过高,使用双指针虽说不能马上降到O ( n ) O(n)O(n),但就是这类题的常用套路: 遍历一遍数组元素,当前元素为num[i];
说明: 无空格字符构成一个单词。
构造函数和其他函数不同,构造函数除了有名字、参数列表和函数体外,还可以有初始化列表,即以冒号开头,后跟一系列以逗号分隔的初始化字段,如下的foo类。
【方法一】回溯+set 和全排列题目差不多的【回溯】套路,但是多了去重操作,比如aba的两个a视为相同的字符,即不能出现两个aab在结果vector中,最简单的方法就是在回溯模板上添个unordered_set去重后存入vector<string>中即可,但是这样木有剪枝,时间复杂度稍慢点。
F9:光标到某一行,按F9可以给该行设置断点,或者取消断点; F5:执行程序到第一个断点停下;
普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。 sizeof运算符不会计算静态成员变量的大小,如下的sizeof(CTest)为4:
因为写代码时不能在一开始就确定被调用的是基类的函数,还是哪个派生类的成员函数,所以C++通过虚函数实现多态,即在基类中用virtual声明,父类可以引用子类对象(如Human* phuman1 = new Men;父类类型指针phuman指向子类对象),子类成员函数可以重写父类方法(函数)。
方法一:小顶堆 求前k大经常用到优先级队列,小顶堆,循环将符合要求的丑数加入小顶堆,取k次堆顶元素即可让堆顶为第k个丑数。而逐个加入丑数即加入2 x 2x2x、3 x 3x3x、5 x 5x5x进入集合(去重)即可。注意这里加入小顶堆的元素不能是int类型,否则会报错overflow(因为next = temp * factor后可能会越界):
(1)确定状态 dp[i]是将正整数i拆成2个及其以上的正整数后,求所有数的乘积值。
字母只有26个英文字母,数字上不超过2位数,本题本质上就是青蛙跳阶梯类型(数字可以是一位,或者两位),只不过需要赋值前进行判断。 (1)确定
题,都能想到referee_id <> 2条件就行,但是会过不了测试用例,这个查询只会返回一个结果:Zach。MySQL 使用三值逻辑 —— TRUE, FALSE 和 UNKNOWN
要从给出的数组中,找到一小坨数满足和能被3整除。dp[i][*]表示在num[i]中,被3整除后的余数为*的最大数(和)。 2.1 确定状态
简单题,读懂题意。如果右边的数比当前的数大,则当前数需要加个负号,如IV是5-1=4;如果右边的数比当前的数字小,则都是加法(注意最后一个数也是用加法的)。 三、代码
方法一: 暴力扫描。对哈希表进行增删查改,就是注意找到prefix开头的键key的操作就行。
中心扩散法。 从每个节点开始,当前结点向两边扩散来判断回文串,因为回文串长度可能是奇数或者偶数,即后者就木有一个中心字符,伪代码应该如下:
简单题,处理后反转字符串,判断和原字符串是否相同。isalnum判断是否为字母或者数字,如果不知道api就写判断条件;tolower是将char字符转为小写字母。 三、代码
0 <= key <= 10^6 最多调用 104 次 add、remove 和 contains 二、思路
【LeetCode451】根据字符出现频率排序(优先队列) (1)根据词频排序,很容易想到用哈希表统计每个字符的个数,然后排序。对于“求前k个”或“排序”的题目可以使用堆排序,用优先级队列实现最大堆,进行堆排序,堆顶即当前的最大值。因为我们的pair<char, int>的second才是对应字符(first)的词频,需要的是对second进行排序,所以重写cmp。
(1)其实和上一题(【LeetCode286】墙与门(BFS))非常相似,这题的0就相当于286题的门,但是本题是可能存在多个门“堆”在一起(多个0)的情况,首先将0加入队列,从每个0开始一圈圈向1用BFS扩散,可以设置二维数组dis记录距离,和用vis二维数组表示是否遍历过的flag。
(1)求数位之和就while循环,每次循环求余; (2)bfs或者dfs都可以,如果用bfs则用到队列,遍历时为了防止重复遍历和遇到不合法的格子,在push入队列之前进行判断。
-1 表示墙或是障碍物 0 表示一扇门
【LeetCode752】打开转盘锁(BFS) 每个节点有8个孩子节点,如题目给的第二个测试用例,start=0000时,4个位置分别可以向上转or向下转,得到1000、9000、0100、0900等8种情况。即这是一棵八叉树。即求解从start数字到target的最短路径。为了找到最小旋转次次数,利用BFS逐层查找,遇到target则返回树高度(层数)。
队列特点:先进先出; 栈特点:先进后出。 题目给出2个队列,为了让队列实现栈的“先进后出”:
给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算其所有整数的移动平均值。 示例:
使用动态数组以便在运行阶段创建需要大小的数组 循环队列的实现关键在于isFull()和isEmpty()的实现(可以有不同的初始化和方法)。
那啥时候我们需要定义动态数组呢?
先读懂题意,删除重复的字母,得到最小的字符串。如babc,删除重复字母有两种结果bac,abc。abc小于bac,所以答案是abc。 遇到一个新字符 如果比栈顶小 并且在新字符后面还有和栈顶一样的 就把栈顶的字符抛弃了。
单调栈模板如下,首先下面版本的前提条件(可灵活改动)是找出nums数组中每个元素,对应的右边的第一个更大的元素值。我们利用一个辅助栈stack,从nums数组的最右边开始倒着遍历:
和 【LeetCode200】岛屿数量(求连通分量个数) 的区别是: (1)1和0对应 水域和陆地,刚好和之前相反;
从4条边界进行遍历,即遇到边界上的1就递归遍历,把边界上的都为1的连通分量改成数字2,dfs搞完后,就遍历一遍二维数组,剩下的1即所求的飞地数量。
(1)找出从太平洋出发的水所能到达的点:
leetcode使用AddressSanitizer检查内存是否存在非法访问。报此错,主要是访问了非法内容。 解决方法:数组访问越界,导致此错,后来发现是在访问二维数组的边界row和col弄反了。。
m == board.length n == board[i].length
如果数据开发平台比较完善,一般以 sql 为主,不管是离线计算,还是实时计算,都只需要在数据开发平台上提交 sql 任务即可。更专注数据模型的建设