- 博客(38)
- 资源 (5)
- 收藏
- 关注
原创 1353.最多可以参加的会议数目
题目分析:贪心:对于一个时间点, 所有之前已经开始的会议和但是此刻还没有结束的会议均可以参加;但是每个时间点只可以参加一个会议,选择结束时间最小的参加1.先记录每一天正在进行的会议 for(int i = 0; i < events.size(); i++) { for(int j = events[i][0]; j <= events[i][1]; j++) { meetings[j].emplace_back(i); } }2.对于每一天来说,这一
2021-04-13 20:47:40
200
原创 435.无重叠区间
题目方法一分析:本题可转换为: 一个二维数组中,互不重叠的区间最多有几个?方法一 动态规划法1.按照数组区间的端点排序;2.排序后的结果为[l0, r0],[l1, ri],...,[ln-1, rn-1]3.假设以第i个数组区间作为最后一个区间,最大的无重叠数目,记作f(i) 3.1 f(0)即以[l0, r0]为最后一个区间的最大的无重叠数据f(0)=1 3.2 f(1),如果r0≤l1(0的右端点小于1的左端点),则f(1)=2; 否则f(1)=1 3.3 f(2)是以[l2,
2021-04-13 13:58:25
290
原创 LeetCode:4-9刷题
按照任意顺序输出class Solution {public: // static bool cmp(pair<int, int>& m, pair<int, int>& n) { // return m.second > n.second; // } struct cmp { bool operator()(pair<int, int> p1, pair<int, int> .
2021-04-09 13:18:57
184
原创 LeetCode:4-8刷题
第一题class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> ret; //维护一个二维数组, 从i 到 j 的乘积, dp[i][j] = dp[i][j - 1] * val[j] vector<vector<int>> dp(nums.size(), vec
2021-04-08 15:13:42
130
原创 Dijkstra算法==>SPFA
//错误写法: #define INF 101class Solution {public: void Show(vector<int>& v) { for(int i = 0; i < v.size(); i++) { cout << i << " 的值为: " << v[i] << " "; } cout << endl;
2021-04-05 22:30:27
116
原创 LeetCode:并查集解决联通路径问题
class Solution {public: //查找x的父根节点 int findOp(int x, vector<int> parent) { //如果其父节点不等于本身 while(x != parent[x]) { x = parent[x]; } return parent[x]; } void unionOp(int x, int y, vector<..
2021-04-05 10:12:21
247
原创 LeetCode: 496.下一个更大的元素
class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { //使用vector来存储nums2中数据往右的大的数字 vector<int> res(nums2.size()); vector<int> ret(nums1.size());.
2021-04-01 20:29:17
102
原创 剑指Offer 27.二叉树的镜像
错误示范:这样更换的结果为:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* lef.
2021-03-27 13:57:17
86
原创 LeetCode冲刺:阶乘后的0
属小于等于n的数中包含5的个数, O(nlog5(n))O(nlog_5(n))O(nlog5(n))注:25 = 5 × 5,是两个5class Solution {public: bool zhengchu(int num) { if(num % 5 == 0) return true; return false; } int numOfFive(int num) { int times = 0; wh.
2021-03-26 12:39:47
100
原创 LeetCode:17.电话号码的字母组合
class Solution {public: void Show(vector<char>& v){ for (int i = 0; i < v.size(); i++) cout << v[i] << " "; cout << endl; } vector<char> Split(string t) { vector<char> res;
2021-03-25 09:50:58
92
原创 LeetCode:131.分割回文串
s.substr(startIndex, endIndex);startIndex用递归来控制, endIndex用循环来控制==> 回溯算法:递归==>控制层==>通过回溯(用栈来理解)循环==>控制每一层的节点情况class Solution {public: void Show(vector<char>& v){ for (int i = 0; i < v.size(); i++) cout <<.
2021-03-24 20:40:55
84
原创 LeetCode:169.多数元素
方法一、排序找众数(只适合众数的个数大于n/2的情况)class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(), nums.end()); return nums[nums.size() / 2]; }};方法二、哈希class Solution {public: int majorityElement(.
2021-03-24 17:44:19
95
原创 LeetCode:53.最大子序和
动态规划结果:超出时间限制class Solution {public: int maxSubArray(vector<int>& nums) { int len = nums.size(); vector<vector<int>> dp(len); int maxn = INT_MIN; //动态规划, dp[i][j] 为连续一段 从i -> j的最大值 .
2021-03-24 16:33:05
85
原创 LeetCode:78.子集
错误代码思路:每个recursive都是一个排列问题通过传不同的m值,让其生成不同规模的遍历(比如m = 2, 生成规模为2的遍历)问题:没办法避免重复==> 如何剪枝class Solution {public: void recursive(vector<vector<int>>& res, vector<int>& visited, vector<int>& output, vector<int&.
2021-03-24 08:57:47
90
原创 LeetCode:46.全排列
class Solution {public: void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len) { if(first == len) { res.emplace_back(output); return; } for(int i = fi
2021-03-23 23:11:19
80
原创 LeetCode:4.寻找两个正序数组的中位数
解法一、先排序,再用哈希取出中位数 O(m + n)class Solution {public: void sort(vector<int>& res, vector<int> nums1, vector<int> nums2, int size) { int size1 = nums1.size(), i = 0; int size2 = nums2.size(), j = 0; //int k.
2021-03-23 09:50:26
63
原创 LeetCode:189.旋转矩阵
解法一、栈方法 O(n)class Solution {public: void rotate(vector<int>& nums, int k) { //栈的方法 int n = nums.size(); k = k % n; int rightBound = n - k - 1; stack<int> S; for(int i = rightBound; i .
2021-03-22 15:57:12
74
原创 LeetCode:134. 加油站
思路一、暴力求解class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int gasSum = accumulate(gas.begin(), gas.end(), 0); int costSum = accumulate(cost.begin(), cost.end(), 0); .
2021-03-22 15:06:33
112
原创 KMP算法:next数组的求解
void getNext(vector<int>& next, string s) { int j = 0; next[0] = 0; // j是s[0:i]这个字符串前缀和后缀相等的最大个数 for(int i = 1; i < s.size(); i++) { while(j > 0 && s[i] != s[j]) { j = next[j - 1]; } if(s[i] == s[j]) { j = j + 1;
2021-03-21 14:35:40
189
原创 LeetCode:5.最长回文子串
思路一、动态规划算法, dp[i][j]=(dp[i+1][j−1])&&(s[i]==s[j]) dp[i][j] = (dp[i+1][j-1]) \&\& (s[i] == s[j])dp[i][j]=(dp[i+1][j−1])&&(s[i]==s[j])class Solution {public: string longestPalindrome(string s) { int n = s.size();
2021-03-20 16:24:44
71
原创 LeetCode:121.买卖股票的最佳时机
思路一、双层循环 O(n^2),复杂度太高,不是一个好答案.class Solution {public: int maxProfit(vector<int>& prices) { //双指针的做法, 固定一侧 int maxn = 0; for(int i = 0; i < prices.size(); i++) { for(int j = prices.size() - 1; j >
2021-03-19 19:27:28
84
原创 LeetCode:98.验证二叉搜索树
思路一、中序遍历,将树从大到小排序,然后一个循环比较前后大小,O(n)//超出边界检验bool checkOut(int v, vector<int> a) { return v >= a.size();}//数组转化成树bool arrayToTree(vector<int> arr, int i, TreeNode* &root) { if(arr[i] != -1 && !checkOut(i, arr)) { root
2021-03-19 15:20:56
60
原创 广度优先搜索和深度优先搜索(非递归)
例图结构广度优先搜索void BFSGraph() { int v = 1; bool* visited = new bool[VexNum]; for(int i = 0; i < VexNum; i++) { visited[i] = false; } queue<int> Q; Q.push(v); while(!Q.empty()) { v = Q.pop(); int u = FirstAdjEdge(v)
2021-03-17 21:28:29
297
原创 深度优先搜索--递归步骤详解
例图结构伪代码void DFSRecursive(bool* visited, int v) { }void DFS() { bool* visited = new bool[VexNum]; for(int i = 0; i < VexNum; i++) { visited[i] = 0; } DFSRecursive(visited, 0);} 代码执行步骤
2021-03-17 15:35:36
797
原创 图的基本数据结构
代码来自《数据结构(C++版)》机械工程出版社/** Graph()创建一个空图 addVertex(vert): 将顶点vert加入图 addEdge(fromVert, toVert):添加有向边 addEdge(fromVert, toVert, weight):添加带权的有向边 getVertex(vKey):查找名称为vKey的顶点 getVertices():返回顶点列表 in:按照vert in graph的语句形式,返回顶点是否存在图中 */ /** 模型:.
2021-03-16 10:12:50
332
原创 红黑树算法--插入
#include <iostream>#define NULLVAL -1using namespace std;bool BLACK = true;bool RED = false; class RBTree { public: RBTree* left; RBTree* right; float val; bool color; RBTree* parent; RBTree() { left = NULL; right = NULL;
2021-03-12 13:57:56
224
原创 二叉树的左旋和右旋
#include <iostream>#define NULLVAL -1using namespace std;bool BLACK = true;bool RED = false; class RBTree { public: RBTree* left; RBTree* right; float val; bool color; RBTree* parent; RBTree() { left = NULL; right = NULL;
2021-03-11 15:06:56
148
原创 二叉树遍历的栈理解
#include<iostream>using namespace std;class TreeNode { public: TreeNode* left; TreeNode* right; char val;}; void GenTree(TreeNode* &root) { char t; cin >> t; if (t == '#') { root = NULL; } else { root = new TreeNode;
2021-03-10 10:02:37
382
原创 最小圆覆盖算法实现C++
#include <iostream>#include <math.h>#include <typeinfo>#define MAXN 3000using namespace std;template <typename T> class Circle;template<typename T>class Point { public: T x; T y; Point(T _x = 0, T _y = 0) {
2021-03-07 11:37:10
452
原创 损失函数与凸优化的逻辑
为什么损失函数可以用梯度下降法来寻找最优解?损失函数是凸函数凸函数的局部最优解就是全局最优解梯度下降法通过寻找极小值来找到最小值凸函数的性质对于多元函数,如果它是凸函数,则其Hessian矩阵是半正定矩阵。如果Hessian矩阵是正定的,则函数是严格凸函数。以一元函数作为样例说明:如果有一个函数,在定义域内,对于任意实数 0≤θ≤10\leq\theta\leq10≤θ≤1,都满足如下条件:f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)f(\theta{x}+(1-\the
2021-01-17 15:48:40
1145
原创 牛顿法、拟牛顿法
思维导图牛顿法求解最优化问题原理牛顿法与梯度下降法的差异拟牛顿法牛顿法求解最优化问题原理原理阐述:f(x)f(x)f(x)的取得最小值(极小值)的必要条件是∇f(x)=0\nabla{f(x)}=0∇f(x)=0,所以牛顿法就是来逼近x∗x^*x∗,使∇f(x∗)=0\nabla{f(x^*)}=0∇f(x∗)=0。 过程推导:f(x⃗)f(\vec{x})f(x)在x0⃗\vec{x_0}x0处的二阶泰勒展开式为f(x)=f(x0)+∇f(x0)T(x−x0
2021-01-17 13:25:16
2123
8
原创 梯度下降法
1. 什么是梯度?定义: 对于函数 w=f(x,y,z)w=f(x, y, z)w=f(x,y,z),如果在P0(x0,y0,z0)P_{0}(x_{0},y_{0},z_{0})P0(x0,y0,z0)处存在偏导数fx′(x0,y0,z0),fy′(x0,y0,z0),fz′(x0,y0,z0)f'_{x}(x_{0},y_{0},z_{0}),f'_{y}(x_{0},y_{0},z_{0}),f'_{z}(x_{0},y_{0},z_{0})fx′(x0,y0,z0),fy′(x
2021-01-16 17:37:18
376
1
原创 补充算法:基于HMM的分词
本文思维导图基于HMM的分词算法对分词统计tf-idf参数停用词库本文选用的停用词库来自 https://github.com/witlxx/tf-idf/blob/v0.0.1/stop_words.txt上述停用词库参考了 https://github.com/goto456/stopwords中的cn_stopwords.txt训练词库和测试词库本文的训练词库见https://github.com/witlxx/tf-idf/blob/v0.0.1/trains.txt本文的
2021-01-07 22:51:10
576
2
原创 特征工程阅读笔记(第四章)
特征工程–思维导图检查数据集填充分类特征编码分类变量扩展数值特征针对文本的特征构建目标使用现有特征构建全新的特征,让模型从中学习编码分类变量对缺失值进行填充将分类数据转换成数值数据定类等级的编码虚拟变量def transform(self, X): return pd.get_dummies(X, columns = self.cols)定序等级的编码标签编码器由于数据的顺序有意义,使用虚拟变量是没有意义的。顺序数据的每个标签都会有一个相关数值。def tran
2021-01-05 23:02:01
221
原创 特征工程阅读笔记(第三章)
特征工程–思维导图KNN算法K-means算法归一化和标准化z标准化极差标准化L1和L2标准化KNN算法算法过程计算待分类观察值与其他观察值之间的距离xk是点X的坐标(x1,x2,...,xn) x_k 是点X的坐标(x_1,x_2,...,x_n)xk是点X的坐标(x1,x2,...,xn)yk是点Y的坐标(y1,y2,...,yn) y_k 是点Y的坐标(y_1,y_2,...,y_n)yk是点Y的坐标(y1,y2,...,yn)欧氏距离:d(x,
2021-01-02 16:28:59
1313
5
原创 特征工程阅读笔记(第二章)
特征工程–思维导图数据的结构化数据的定性和定量数据等级数据可视化和探索分析描述性统计数据的结构化mysql的数据存储特征idnameage01小李2202小姚1803小张24类似于这种存储结构的数据称为结构化数据,按照本书的定义,行是观察值,列是属性。mongodb的数据存储特征{ObjectId: "5349b4ddd2781d08c09890f3", name: "小李", "age": 22},{ObjectId: "5
2020-12-31 14:12:54
88
原创 特征工程阅读笔记(第一章)
特征工程–思维导图1.3 特征工程是什么1.4 特征工程评估的步骤和指标1.5 从数据集中找重点(GET)1.6 清洗数据的方法1.7 删除数据中的属性(DELETE)1.8 增加新特征(POST)1.9 特征的转换(PUT)1.10 人工智能方法特征工程定义是一个过程:将数据转换为能更好地表示潜在问题地特征,从而提高机器学习性能。约定术语观察值:数据地每行属性:数据地每列特征:属性中对于机器学习问题有帮助的列监督学习:含标签的分析,目标是预测无监督学习:从数据中提取结
2020-12-31 13:31:02
102
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人