- 博客(140)
- 资源 (5)
- 收藏
- 关注
原创 LaTeX参考文献中遇到错误:Missing $ inserted. [\printbibliography[heading=bibintoc]]
博主最近在撰写论文的过程中,由于需要在参考文献中添加网址,在编译过程中遇到了如下报错:Missing $ inserted. [\printbibliography[heading=bibintoc]]错误原因是:参考文献中(或其它地方),如果网址中有下划线 _ ,那就需要在网址前面加上\url,不然就会报错。(因为下划线在LaTeX里面是编辑公式里用来表示下角标的)...
2019-12-26 10:53:58
4639
原创 我的机器学习入门之路(下)——知识图谱、推荐、广告
继上一篇《我的机器学习入门之路(中)——深度学习(自然语言处理)》,这一篇博客主要记录了我对知识图谱、推荐和广告等方向的一些涉猎与基础学习。一、知识图谱从自然语言处理到知识图谱,是一个很自然和直接的应用。知识图谱的内容非常多,因为没有做过相应的项目,所以我也只是学习和了解为主。主要包括两部分:理论学习、实践教程。1、理论学习部分什么是知识图谱?:https://mp.we...
2019-11-19 13:59:53
1196
1
原创 我的机器学习入门之路(中)——深度学习(自然语言处理)
继上一篇《我的机器学习入门之路(上)——传统机器学习》,这一篇博客主要记录深度学习(主要是自然语言处理)这一块内容的学习过程。以下均将自然语言处理简称NLP。这一块内容的学习路线分为三部分:明确NLP的研究问题及传统的方法有哪些、深度学习(NLP)基础及深度学习框架的使用、NLP的深入学习。一、明确NLP的研究问题及传统的方法有哪些不像机器学习中研究的问题一般都是直接的分类或...
2019-11-15 22:06:53
1927
原创 我的机器学习入门之路(上)——传统机器学习
这篇博客主要记录了我自己的学习路线及相应的资料汇总。总时间跨度约为6个月,主要是利用了晚上的时间和周末的时间,每天坚持下来,日积月累,回过头来,可能会惊讶于自己的进步。对于一个机器学习的小白来说,往往不知道如何入门机器学习,毕竟机器学习的知识点非常多,方向也比较多,所以,在我们进行学习之前,有必要对机器学习的大方向做一个汇总比较与选择。机器学习的应用方向主要包括:搜索、推荐、广告、风控、计算机...
2019-11-13 13:48:36
5472
3
原创 Leetcode 345. 反转字符串中的元音字母 解题思路及C++实现
解题思路:设置两个指针 left 和 right,大循环中的每一个循环,找到前面、后面两个元音字母,然后交换这两个元音。class Solution {public: bool whethertrue(char& c){ if(c == 'a' || c == 'A' || c == 'e' || c == 'E' || c == 'i' |...
2019-09-03 21:51:41
389
原创 Leetcode 344. 反转字符串 解题思路及C++实现
解题思路:直接将第 i 个字符 与 第 n-1-i 个字符交换,就可以了。class Solution {public: void reverseString(vector<char>& s) { // if(s.empty()) return; int n = s.size(); for...
2019-09-03 21:37:29
258
原创 Leetcode 234. 回文链表 解题思路及C++实现
解题思路:先用快慢指针找到链表的中间节点,然后将链表一分为二;然后将后半部分链表进行翻转,用到三个指针;接着分别遍历两个链表,逐个比较 val 值,如果出现不相等,就返回 false。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *...
2019-08-24 23:18:29
180
原创 Leetcode 125. 验证回文串 解题思路及C++实现
解题思路:利用头尾双指针:i ,j 。需要判断每一个字符是否为字母或数字,c++中对应的函数为 isalnum,如果不是字母或数字,返回0。c++中判断大小写字母字符的函数是 isalpha,是大写返回1,是小写返回2,不是英文字符返回0。其实,在一开始可以用c++中的transform 函数,将输入字符串 s 中的字母都转为小写。class Solution {pu...
2019-08-21 21:29:35
258
原创 Leetcode 279. 完全平方数 解题思路及C++实现
两种都是动态规划的方法,但第一种比较暴力和愚蠢,第二种利用了完全平方数。方法一:无脑动态规划,会超时解题思路:利用一维数组存储 n 个整数的结果。首先要判断 i 是不是 就是一个完全平方数,如果是,那就不用循环遍历后面的状态转移方程了,dp[i] = 1即可。当 i 不是完全平方数时,状态转移方程为 dp[i] = min(dp[k] + dp[i - k]),找到最小的分割,...
2019-08-20 18:03:01
567
原创 Leetcode 223. 矩形面积 解题思路及C++实现
解题思路:着重研究一下矩形四个顶点坐标的大小关系。if 条件语句中判断是否出现不重叠的情况。当出现重叠时,需要找出重叠矩形的四个顶点坐标:在小的横坐标中找出更大者,就是重叠矩形中较大的横坐标值 x1,在大的横坐标中找出更小者,就是重叠矩形中较小的横坐标值 x2。重叠矩形的纵坐标也同理可得。class Solution {public: int computeAre...
2019-08-20 14:55:45
556
原创 Leetcode 172. 阶乘后的零 解题思路及C++实现
解题思路:找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意。class Solution {public: int trailingZeroes(int n) { // n = 10; int ans = 0; while(n) { ...
2019-08-15 23:40:33
305
原创 Leetcode 171. Excel表列序号 解题思路及C++实现
解题思路:26进制转10进制。没啥可说的了。class Solution {public: int get_26(int n){ int res = 1; while(n > 0){ res *= 26; n--; } return res; }...
2019-08-15 18:27:12
285
原创 Leetcode 168. Excel表列名称 解题思路及C++实现
解题思路:相当于实现了一个10进制转26进制。要注意减 1 。class Solution {public: string convertToTitle(int n) { char a[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','...
2019-08-15 18:19:46
247
原创 Leetcode 206. 反转链表 解题思路及C++实现
解题思路:利用三个指针 left、right、tmp。left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...
2019-08-14 16:02:04
184
原创 Leetcode 203. 移除链表元素 解题思路及C++实现
解题思路:定义两个指针分别指向当前节点和上一个节点。遍历一次链表即可。需要注意的情况是,链表的头结点的 val 就和输入的 val 相等 这一情况。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNod...
2019-08-14 15:26:37
241
原创 Leetcode 160. 相交链表 解题思路及C++实现
解题思路:先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN...
2019-08-14 15:14:35
303
原创 Leetcode 141. 环形链表 解题思路及C++实现
解题思路:定义快慢两个指针,当指针所指节点是同一个时,说明出现了环。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */...
2019-08-14 14:32:01
175
原创 Leetcode 166. 分数到小数 解题思路及C++实现
解题思路:这道题目的核心是怎么找到循环部分:当出现重复的余数时,就会出现循环。前面需要考虑比较多种情况:除数是否为0;结果的正负;结果的整数部分和小数部分分开求解。在求解小数部分的时候,需要用到 unordered_map 来记录出现过的余数。同时需要用一个数组来记录每一次除法得到的商的字符串。具体程序如下:class Solution {public: st...
2019-08-14 14:15:48
303
原创 Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
解题思路:主要包括三步。第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后。第二步是遍历一次链表,解决拷贝节点的random指针的指向。第三步是从这个大链表中,拆出原有链表和拷贝链表。具体图解,课参考LeetCode官方图解。/*// Definition for a Node.class Node {public: int val; ...
2019-08-14 10:39:12
197
原创 Leetcode 205. 同构字符串 解题思路及C++实现
解题思路:仔细阅读题意,应注意到一个 hash表是不够的,需要新建两个hash表,分别存储 s->t 和 t->s 的映射。class Solution {public: bool isIsomorphic(string s, string t) { if(s.length() != t.length()) return false; ...
2019-08-03 14:28:42
387
原创 Leetcode 204. 计数质数 解题思路及C++实现
解题思路:利用一个数组记录 n 个数是否为质数。质数的倍数都是非质数,就这样遍历下去就可以了。class Solution {public: int countPrimes(int n) { if(n < 3) return 0; int res = 0; vector<bool> tag(n, tru...
2019-08-03 13:43:42
337
原创 Leetcode 202. 快乐数 解题思路及C++实现
解题思路:用递归的方法,出现1,就返回true,这里用了 unordered_map 来记录是否会出现循环。(也可以用unordered_set)通过计算余数和商,来得到每个位置数字的平方和。具体看程序。class Solution {public: bool isHappy(int n) { if(n == 1) return true; ...
2019-08-03 11:16:47
421
原创 Leetcode 209. 长度最小的子数组 解题思路及C++实现
解题思路:定义两个指针 left 和 right,构成一个滑动窗口,当窗口内的数值和小于 s 时,右指针向右滑动,当窗口内的数值和大于等于 s 时,就要更新一次 子数组的最小长度了。同时 左指针向右滑动。class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { ...
2019-07-30 18:35:51
332
原创 Leetcode 162. 寻找峰值 解题思路及C++实现
解题思路:这道题应该归为简单,只要找到第一个降序的值就可以了。class Solution {public: int findPeakElement(vector<int>& nums) { if(nums.empty()) return 0; int n = nums.size(); int i = 0...
2019-07-30 16:36:05
306
原创 Leetcode 153. 寻找旋转排序数组中的最小值 解题思路及C++实现
解题思路:二分查找使用二分查找来寻找最小值。left,right,mid分别代表数组中最左边、中间、最右边的元素。这三个数字在旋转数组中的大小比较总共有三种情况。1、数组是升序的,即 nums[left] < nums[mid] < nums[right] ;2、数组是降序的,即 nums[left] >nums[mid] >nums[right] ;...
2019-07-30 16:26:43
190
原创 Leetcode 152. 乘积最大子序列 解题思路及C++实现
解题思路:求乘积最大的子序列,不同于和最大的子序列,两个负数相乘是会得到正数的,所以在遍历数组nums时,需要存储最大和最小的子序列乘积。然后每遍历一个元素,更新一次。class Solution {public: int maxProduct(vector<int>& nums) { if(nums.empty()) return 0...
2019-07-30 15:57:35
323
原创 Leetcode 120. 三角形最小路径和 解题思路及C++实现
解题思路:这是一个典型的动态规划问题,定义一个数组 dp,dp[i] (tmp[i]也是)表示到达当前行第 i 个元素的最小路径和。所以只需要定义一个1维数组dp(n, 0),每循环遍历第 i 行,就更新 dp 的前 i + 1个数。所以循环内新增了一个 tmp 数组。状态转移方程为:tmp[j] = min(dp[j], dp[j-1]) + triangle[i][j]; ...
2019-07-30 11:23:30
446
原创 Leetcode 90. 子集 II 解题思路及C++实现
解题思路:经典的深度优先搜索问题。这里,根据子集的元素个数 i ,分别进行 dfs 。因为 nums 数组中有重复元素,所以在 dfs 程序中,需要有一个去重的判断。判断逻辑为:当前元素与上一个元素相等,那就跳过当前元素的深搜。但是还有一个很重要的条件是 i > begin,因为这样,才能保证一定会对深搜的某一层递归中的第一个元素进行搜索。这样得到的答案才不会缺少子集。...
2019-07-30 10:39:41
286
原创 C++ 读取两行不确定数量的整数
之前一直在网上找c++读取多行不确定数量整数的代码,都没看到好用的,最近看到一个比较简洁的。代码如下:#include<iostream>#include<vector>#include<string>using namespace std;int main(){ vector<int> a; vector<int&g...
2019-07-30 10:33:12
1288
4
原创 Leetcode 283. 移动零 解题思路及C++实现
解题思路:只需做一次遍历,用一个数 count 和累加已出现的 0 的个数,当 nums[i]不等于0,且count 大于0时,将 nums[i] 向前移动count 位 即可。最后,将数组的最后 count 个数置为0即可。class Solution {public: void moveZeroes(vector<int>& nums) { ...
2019-07-27 23:32:36
263
原创 Leetcode 219. 存在重复元素 II 解题思路及C++实现
解题思路:使用 unordered_map 来遍历一次数组,并将同一个数值对应的索引存在一个vector中,所以,vector中的索引刚好也是从小到大排好序的。然后看看vector.size() 大于等于 2 的数字,其索引间隔是否满足要求。class Solution {public: bool containsNearbyDuplicate(vector<int>...
2019-07-27 22:57:05
190
原创 Leetcode 217. 存在重复元素 解题思路及C++实现
方法一:暴力法解题思路:利用 unordered_map 来对出现的数字进行计数,一旦出现有重复数字,就返回true,否则就返回false。class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_map<int, int> mp...
2019-07-27 22:37:39
279
原创 Leetcode 189. 旋转数组 解题思路及C++实现
方法一:暴力方法解题思路:用栈存储后面的 k 个元素,然后将 nums 数组的元素往后挪 k 位,然后再将栈中的元素存进nums数组中。class Solution {public: void rotate(vector<int>& nums, int k) { int n = nums.size(); k = k ...
2019-07-26 17:37:33
271
原创 Leetcode 167. 两数之和 II - 输入有序数组 解题思路及C++实现
解题思路:因为数组本身是有序的,所以比较简单。定义两个指针,分别指向数组的头部和尾部。偏大的话,就将尾部指针向前移一位;偏小的话,就将头部指针向后移一位。class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { //定...
2019-07-26 16:48:29
189
原创 Leetcode 88. 合并两个有序数组 解题思路及C++实现
解题思路:定义三个指针,分别从 nums1 和 nums2 数组的尾部开始向前扫一遍,即可将最终的排序结果存储在nums1中,时间复杂度为 O(m+n)。class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {...
2019-07-26 16:30:22
198
原创 Leetcode 963. 最小面积矩形 II 解题思路及C++实现
解题思路:这道题目的难点在于如何判断一个矩形,网上也有很多方法。对于给定的四个点,可以判断其四个顶点是否是直角,或者先求出中心点,矩形中每个点到中心点的距离是相等的。下面给出的程序的逻辑是:暴力遍历每三个顶点,先判断其是否构成两条垂直的边,如果垂直的话,就去找第四个顶点,通过一个 unordered_set 查找,即可知道points数组中是否存在第四个点。判断是否垂直:向量内积为...
2019-07-26 15:51:43
764
原创 Leetcode 398. 随机数索引 解题思路及C++实现
解题思路:题目对空间复杂度有要求。在构造函数中,应该要先把nums数组拷贝一下。在pick函数中,必然要遍历数组nums,这样才能得到 target 值对应的所有索引,之后再生成一个随机数,返回任一索引。class Solution {public: vector<int> nn; Solution(vector<int>& n...
2019-07-26 11:22:42
262
原创 Leetcode 382. 链表随机节点 解题思路及C++实现
解题思路:因为题目中要求需要常数级的空间复杂度,所以就需要计算链表长度了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };...
2019-07-26 11:09:05
170
原创 Leetcode 375. 猜数字大小 II 解题思路及C++实现
方法一:递归解题思路:设置一个dp数组,dp[i][j] 表示从数字 i 到 j ,保证猜中所选数字所需的最小花费。在数字 i 到 j 之间进行猜测时,我们选择数字 i < k < j,则花费为 k + max(dp[i][k-1], dp[k+1][j]),也就是说,花费是 k 加上其左右两段中的最大者,这样才能保证猜中数字。所以,遍历从 i 到 j 之间的数字k,得到最...
2019-07-26 10:45:24
441
原创 Leetcode 622. 设计循环队列 解题思路及C++实现
解题思路:使用整数数组来作为队列的数据结构,设置两个位置指针:front 和 end,front指向队首元素,end指向队尾的下一个元素(即为空位置)。当 front 和 end 相等时,有两种情况:队列为空 或 队列满了。这时候需要辅助的标记位 flag。当插入新元素时,要判断队列是否会变满;当删除元素的时候,要判断队列是否变为空。相应地更新flag。class MyCircul...
2019-07-25 11:54:44
228
IEEE 802.15.4标准文档 2015年
2018-06-02
Windows将下位机串口传输数据存储在txt文件并显示的VS2010工程及exe程序
2018-05-22
基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)
2018-05-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人