随笔分类 - 数据结构
摘要:目录 一、二分查找实现 upper_bound、lower_bound 二、排序——快排 三、排序——归并 四、排序——堆排 五、排序——冒泡 六、最大子数组和 七、最大子数组积 七、TopK问题 一、二分查找实现 upper_bound、lower_bound 记住两个函数的含义upper_bou
        阅读全文
                
摘要:leetcode 面试题51. 数组中的逆序对 本质上就是归并排序,并在合并区间过程中统计交换的逆序对的数目 归并排序需要开o(n)的辅助空间 class Solution { public: int deal(vector<int>&nums,vector<int>&tmp,int ll,int 
        阅读全文
                
摘要:维护一个小根堆寻找最大的K个元素,不会改变存储空间的内容,时间复杂度o(nlogK),空间复杂度o(K) 0903加,一种优化方法:维护一个K个值的小顶堆,每次发现堆外值大于堆顶,就把堆顶替换成这个大值,重新维护堆平衡,直到最后,这个堆就是topk multiset<int,less<int>>维护
        阅读全文
                
摘要:没在现场,不知道能过多少样例: 第一题: 一副扑克牌,总共有 A 2 3 4 5 6 7 8 9 每张牌各4张,从中抽取任意张牌,牌可以有四种出法 单张牌,比如说 A 一对牌,比如说 两个2 五张牌顺子,比如说 A 2 3 4 5 六张牌连对,比如说 A A 2 2 3 3 现在输入是10种牌每张牌
        阅读全文
                
摘要:手撕字符串复制 char * strcppy(char * dest,const char *src,size_t count) { char *tmp = dest; while (count-- && (*dest++ = *src++) != '\0'); return tmp; } c++常
        阅读全文
                
摘要:一、动归引入 leetcode 70. 爬楼梯 class Solution { public: int climbStairs(int n) { map<int,int>donser; for(int i=1;i<=n;i++) { if(i==0||i==1||i==2) donser[i]=i
        阅读全文
                
摘要:一、需要还原状态的递归回溯 leetcode 46. 全排列 打印一串数字的全排列,定义一颗树,树的每个节点map<int,int>used保存当前哪些点用了哪些点还没用,Tnode *next[100]保存接下来的每一个点的索引 就是一个建树的过程,当前数字栈达到了最大长度就保存一次结果,每一个节
        阅读全文
                
摘要:一、拓扑排序 leetcode 207. 课程表 维护一个数据结构用于存储图的入度或者出度的结构,每次删除入度=0的点及它的出度连线,直到不存在入度=0或者所有节点都已经删除为止。 具体实现时需要有一个标记数组标记已经删除的结点,存储每一个点的入度是多少,出度所连的点有哪些 struct discr
        阅读全文
                
摘要:一、平衡二叉树 leetcode 110. 平衡二叉树 二叉树判断是否平衡。 对逐个结点判断左右子树是否满足条件。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * 
        阅读全文
                
摘要:Dijkstra算法适用范围是单源最短路,有向图或者无向图,不能处理负权值 Floyd算法适用多源最短路,有向图或者无向图,可以处理负权值但是不能处理负权回路 Ford 算法单源最短路,可以处理负权值,能检测负权回路 Leetcode 743. 网络延迟时间 一、先用Dijkstra算法解,输入是v
        阅读全文
                
摘要:BFS leetcode 279. 完全平方数 vector存每一层的节点,弹出一个节点就压入这个节点所有的子节点。 从上往下维护一颗树,根节点是要找的n,第一层子节点是父节点减去i*i以后的值,一直到发现0为止。 注意必须要用一个标记数组记录已经走过的点避免重复查找,否则会超时 如果更改一下顺序,
        阅读全文
                
摘要:leetcode 239. 滑动窗口最大值 题解说用双端队列解,效率的确要高一点,有时间试试。 这里用标记数组实现的,先扫描一遍数组内记录比当前值大的下一个值的下标一边搜索 class Solution { public: vector<int> maxSlidingWindow(vector<in
        阅读全文
                
摘要:用两个栈实现队列,用两个队列实现栈都要会 leetcode 面试题09. 用两个栈实现队列 #include<stack> class CQueue { public: stack<int> in; stack<int> out; int state=0; CQueue() { } void app
        阅读全文
                
摘要:链表必须清楚掌握 链表定义 struct ListNode { int val; ListNode *next; }; 创建链表头 ListNode* creat()//创建头 { struct ListNode *node=(struct ListNode *)malloc(sizeof(stru
        阅读全文
                
摘要:leetcode 191. 位1的个数 维护匹配串 从1开始逐位移动比较 class Solution { public: int hammingWeight(uint32_t n) { // uint32_t为32位无符号类型数据 int count=0; uint32_t donser=1; f
        阅读全文
                
摘要:leetcode 69. x 的平方根 注意边界条件和判断条件 mid int存不下要用long long long long mid=lower+(upper-lower)/2 取上界 long long mid=lower+(upper-lower+1)/2 取下界 class Solution
        阅读全文
                
摘要:表示数值的字符串 以e或E分成两部分分别判断即可。 int maxl(int a,int b) { if(a>b) return a; return b; } class Solution { public: bool isNumeric(string str) { int lable=0,pos=
        阅读全文
                
摘要:一、斐波那契数列 面试题10- II. 青蛙跳台阶问题 同 509. 斐波那契数 #define mods 1000000007 class Solution { public: map<int,int>donser; int find(int n) { if(n==0||n==1) return 
        阅读全文
                
摘要:一、 const:如果函数参数是指针,且仅作输入用,则必须在类型前面加上const,以用来防止该指针在函数体内被意外修改。 const在*前表示指针所指的内容固定(不允许*abc="789"),指针的指向可变 const int *abc="123" ;abc="345"; const在*后表示指针
        阅读全文
                
摘要:一、快慢指针: leedcode 142. 环形链表 II 快慢指针的思想是设置慢指针slow和快指针fast,slow每次走一步,fast每次走两步,如果有环fast指针和slow指针必然相遇,相遇时 定义新的指针p从head开始和slow从当前位置起每次都走一步,直到相遇,相遇的位置就是环的入口
        阅读全文
                

 浙公网安备 33010602011771号
浙公网安备 33010602011771号