- 博客(68)
- 收藏
- 关注

原创 【c++】 STL容器及常用函数
c++ STL容器及常用函数前置知识迭代器介绍定义:迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器和指针的区别迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL容器内全部或部分元素”的对象, 本质是封装了原生指针,指针的++只是简单的去增加快大小的地址,这在支持随机迭代器的容器中是可行的,但是当去遍历list这种内
2022-04-15 16:28:35
1709
2
原创 Streaming systems 第三章中文
我们一直从pipeline设计者或数据科学家的角度来研究流处理。第二章介绍了水印,对事件时间处理中发生的位置和处理时间中结果何时输出的基本问题做了一部分回答。在本章中,我们将从流处理系统的底层机制的角度来探讨相同的问题。研究这些机制将有助于我们motivate, understand, and apply与水印相关的概念。我们将讨论如何在数据入口点创建水印,它们如何通过data processing pipeline传播,以及它们如何影响output
2023-03-08 16:01:37
706
原创 Streaming System 第一章翻译
尽管商业驱动使得对流的兴趣激增,但与它们的同类批量系统相比,streaming system长期以来仍然相对不成熟。直到最近,这股潮流才决定性地转向了另一个方向。一小部分原因可能是因为我的“Streaming101”和“Streaming102”博客文章中提供了大量的激励(这本书的前几章显然是基于这些博文)。但在现实中,也有很多行业对streaming system的成熟感兴趣,有很多聪明和活跃的人喜欢构建它们。首先,我将介绍一些重要的背景信息,这些信息将有助于构建我想讨论的其他主题。
2023-03-03 17:53:53
802
原创 【c++】虚函数和虚函数表(多态)
虚函数和纯虚函数的作用定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
2022-08-24 21:18:41
367
原创 【C/C++】malloc/free 和 new/delete
如果home是一个变量,那么&home是它的地址。指针用于存储值的地址。*运算符被称为间接值或接触引用运算符。假设p是一个指针,*p表示存储在该地址处的值。指针声明时必须指定指针指向的数据的类型。int *p代表*p是一个int型的变量。int* p,q;创建了一个指向int的指针和一个int变量。...
2022-08-04 10:22:07
256
原创 C语言指针和数组
pz指向一个包含两个int值的数组。[]的优先级高于*,如果不加括号,那么定义的就是由两个指针组成的数组。参考《cprimer(第五版)》httpshttpshttps。
2022-08-02 16:17:50
564
原创 【python】用python如何去写lp文件(整数规划约束)
import mathdef write_con(n,path,m): f = open(path,"a",encoding = "utf-8") for i in range(1,n): f.write("x" + str(i) + " + " + "y" + str(i) + " + ") f.write("x" + str(n) + " + " + "y" + str(n) + " <= " +str(m) + "\n") f.close()path = r"D:\code\.
2022-05-08 14:25:27
1076
原创 【c++】【leetcode25】k个一组反转链表
k个一组反转链表解题思路暴力求解:k个一组进行翻转,每一次翻转之前检查剩下的结点是否有k个,如果不够k个,就不进行翻转。用指针t记录每次翻转开始前的第一个结点,因为每次翻转前的第一个结点也就是下一次翻转要接入的位置。翻转链表采取头插法。代码class Solution {public: ListNode* reverseKGroup(ListNode* head, int n) { ListNode* h = new ListNode; ListNod
2022-05-06 21:17:56
1067
原创 【c++】【leetcode42】接雨水(动态规划、单调栈、双指针)
接雨水解题思路:动态规划每一根柱子头顶上能接多少雨水取=min(左边最高,右边最高)- 柱子本身的高度因此只需要得到下标为i的柱子左边最高的left_max和右边最高的right_max的值就可以ans[i] = min(left_max[i],right_max[i]) - height[i]如果是每一个柱子都去遍历寻找,时间复杂度是O(n2)O(n^2)O(n2),这里可以借助动态规划去保存已经寻找过的信息。动态规划:初始化: left_max[0] = height[0]; ri
2022-05-06 17:43:28
877
原创 【c++】【leetcode904】水果成蓝(滑动窗口)
水果成篮解题思路使用滑动窗口求解,分别设置left指针和right指针指向窗口两边。核心是如何更新窗口的起始位置寻找到第二种水果第一次出现的位置(中间不包含第一种水果),即为下一次窗口更新的位置的起点。实现方法:先利用right指针顺着找第三种元素出现的位置,然后将left与right同位,再利用left指针回退,逆着找到第三种元素的位置,left加一即为滑窗的新开始位置。代码class Solution {public: int totalFruit(vector<in
2022-05-01 18:59:14
753
原创 【c++】【leetcode23】合并k个有序链表(优先队列)
合并k个有序链表解题思路如果是合并两个有序链表:两个指针分别指向第一个元素,比较大小,将小的选出来,指针后移合并k个有序链表比较k个链表中的第一个元素,取出最小的,然后指针后移。每次都要取出最小的元素,然后插入新的元素,用优先队列实现。优先队列底层是大顶堆/小顶堆,获取顶部元素O(1),插入和删除元素O(logk),每一个元素被插入一次,删除一次,时间复杂度为O(knlogk)O(knlogk)O(knlogk),最多有knknkn个顶点。代码class Solution {publi
2022-04-28 10:37:35
620
原创 【c++】【leetcode91】解码方法(动态规划)
解码方法题解dp[i]表示到第i-1个字母时解码的方法有多少种动态转移方程dp[i] = dp[i-1]+dp[i-2]特殊情况s[i]无法和s[i-1]组合:s[i-1]=0 or s[i-1] > 2 or (s[i-1] = 2 && s[i] > 6 ,此时dp[i] = dp[i-1]s[i]只能和s[i-1]组合,s[i]=0,此时dp[i] = dp[i-2]class Solution {public: int numDecodi
2022-04-26 14:22:04
977
原创 【c++】【leetcode62】不同路径1/2,路径和(动态规划)
不同路径解题思路使用动态规划算法dp[i][j]代表走到第i行第j列有多少路径dp[0][j]只能由dp[0][j-1]走来dp[i][0]只能由dp[i-1][0]走来if(i == 0 && j != 0)dp[i][j] = dp[i][j - 1];else if(j == 0 && i != 0)dp[i][j] = dp[i - 1][j];else if(!i && !j)continue;else dp[i][j] = d
2022-04-25 17:35:50
847
原创 【c++】【leetcode207】课程表(拓扑排序)
leetcode课程表解题思路求拓扑排序,从入度为0的点出发去遍历vector<vector<int>> edges(numCourses);记录每个顶点的关联顶点vector<int> degree(numCourses);记录每个顶点的入度class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisite
2022-04-25 15:24:38
1272
原创 【c++】【leetcode679】24点游戏(暴力枚举dfs+代码优化)
leetcode 679: 24点游戏解题思路1、整数转换为浮点数求解,因为除法可能会出现小数2、浮点数和24比较,确定一个精度误差3、枚举所有的可能,如果达到24进行剪枝核心在4个数中任选两个数进行四则运算,假设为a op b = x,此时在数组中删除a和b,把x加入数组中,在剩下的三个数里任选两个进行四则运算。当数组中只剩下一个数时,说明运算完成,与24比较即可。代码class Solution {public: const double eps = 1e-8;
2022-04-25 10:39:28
2927
原创 【c++】【leetcode386】字典序排序
leetcode 386 字典序排序解题思路要求线性时间算法空间花销为常数观察字典序排序能得出以下结论:每一组数以10为分界如果到某个以9结尾的数或者到最后一位数,就说明当下这一组数结束了使用递归会有额外的空间花销,所以这里使用迭代去实现class Solution {public: vector<int> lexicalOrder(int n) { vector<int> ans(n); int number =
2022-04-18 17:16:02
926
原创 树的路径和总结:【leetcode124,543,2246】
解题思路一棵保存信息的树如何去递归?分析单独的子树要进行什么操作分析这颗子树要返回什么东西示例1、二叉树的直径每一棵子树的直径是其子树+1返回的当前结点的直径(左边的直径和右边的直径取最大)2、二叉树的最大路径和每一棵子树的路径和max(左孩子路径和,有孩子路径和)+根节点的值,如果左孩子或者有孩子路径和为负数,则直接砍掉不要返回当前子树的最大路径和代码如下leetcode543二叉树的直径class Solution {public: int ans =
2022-04-18 16:34:28
783
原创 【C++】【leetcode200】岛屿数量(DFS、BFS)代码优化
岛屿数量DFSclass Solution {public: int n,m; void dfs(vector<vector<char>>& grid, vector<vector<int>>& visited,int i,int j) { if(i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == '0')return
2022-04-15 21:37:25
527
原创 【C++】【leetcode130】被围绕的区域(DFS)
被围绕的区域DFS解题思路图的深度优先搜索这里有一个思路:利用占位符去标记,就不需要有一个新的标记数组class Solution {public: int n, m; void dfs(vector<vector<char>>& board, int x, int y) { if(x < 0 || y < 0||x > n - 1 || y > m - 1 || board[x][y] != 'O')r
2022-04-15 19:34:54
401
原创 【c++】【leetcode547】省份数量
leetcode547省份数量解题思路并查集1、find()函数,发现x的根2、Union()函数,合并代码class Solution {public: //发现x的根 int find(vector<int> &parent, int x) { if(parent[x] != x) { parent[x] = find(parent,parent[x]); } return par
2022-04-12 17:10:16
579
原创 【c++】【leetcode128】最长连续序列(含set用法)
leetcode 最长连续序列解题思路用哈希表存储所有的数遍历哈希表如果num-1在哈希表中,说明该元素不是根,忽略,如果num-1不在哈希表中,该元素为根,查找该元素的最长序列关键在于如果避免重复查找时间复杂度分析:代码class Solution {public: int longestConsecutive(vector<int>& nums) { if(nums.empty())return 0; //用集合set存
2022-04-12 15:32:10
716
原创 算法导论学习笔记——递归及解法
算法导论学习笔记——递归及解法大O表示法:算法运行上界f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n)) : 存在一个常数 c>0,n0>0c>0,n_0>0c>0,n0>0,such that 0<=f(n)<=cg(n)0 <= f(n) <= cg(n)0<=f(n)<=cg(n), for all n>=n0n >= n_0n>=n0。f(n)f(n)f(n)以g(n)g(n)
2022-04-11 17:11:38
344
原创 算法导论学习笔记——算法分析
算法导论学习笔记——算法分析算法分析是关于计算机程序性能和资源利用的研究,特别关注性能,什么比性能更重要?正确性健壮性(是否经常奔溃)模块化:只需要修改局部的代码安全性problem sortingInput:一个数字序列output:排序之后的序列插入排序:最坏的时间复杂度O(n2n^2n2),逆序情况时间复杂度T(n)T(n)T(n):输入规模位n时算法的运行时间Average-caseT(n)T(n)T(n):运行时间的期望值best-case(cheat)
2022-04-11 11:16:01
375
原创 【c++】【leetcode 99】恢复二叉搜索树
恢复二叉搜索树解题思路二叉搜索树的中序遍历应该是升序排列,如果不是升序排列说明中间出现了问题。1、得到二叉搜索树的中序遍历2、找到不符合顺序的两个值进行交换,即当前数大于下一个数的值如:12375648,找到第一个顺序不符的7,和第二个顺序不符的4,把两个数进行交换就可以恢复正序时间复杂度:O(n),遍历一遍即可得到结果空间复杂度:O(n)代码/** * Definition for a binary tree node. * struct TreeNode { * int
2022-04-03 17:16:11
1181
原创 【c++】【leetcode 56】合并区间
解题思路1、按照区间起点从小到大排序2、每一次比较答案中最后一个区间终点和未遍历的区间点3、若起点小于等于终点,说明有区间重叠,选取两个区间较大的终点作为新的终点时间复杂度:O(nlogn)代码class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { //二维数组按列排序 sort(in.
2022-03-31 21:08:35
639
转载 快速幂算法学习笔记
原文链接:快速幂算法什么是快速幂算法取模运算法则(a + b) % p = (a % p + b % p) % p (1)(a - b) % p = (a % p - b % p ) % p (2)(a * b) % p = (a % p * b % p) % p (3)(a * b * c) % d=(a%d * b%d * c%d) % d; 因此,我们可以借助这个法则,只需要在循环乘积的每一步都提前进行“取模”运算,而不是等到最后直接对结果“取模”,也能达到同样的效果。/
2022-03-31 11:34:52
143
原创 【c++】【leetcode 49】字母异位词分组(自留)
解题思路字母异位词:单词使用的字母和数量是相同的,仅仅是排列不同。排序+计数的思想字母异位词排序之后单词排列一致哈希表的键值为排序之后的单词,键值对应的值为一组字母异位词。代码class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string,vector<strin.
2022-03-28 17:36:53
1111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人