自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PaniniGu的博客

生命不息,奋斗不止。

  • 博客(33)
  • 资源 (5)
  • 收藏
  • 关注

原创 Leetcode 169. 求众数 解题思路及C++实现

解题思路:因为int型数值只有32位,使用位运算的方法来解这道题时,就是要确定这个众数,在32位的位置上分别是0还是1。由题意,因为众数的个数超过n/2,所以遍历数组nums后,如果某一位置上1的个数多于0 的个数,那么众数值在这个位上就为1,否则为0。所以下面程序的时间复杂度为O(32n),空间复杂度为O(1)。class Solution {public: int...

2019-05-25 19:41:37 753

原创 Leetcode 136. 只出现一次的数字 解题思路及C++实现

解题思路:利用异或操作的性质:1.恒定律:A ^ 0 = A2.归零率:A ^ A = 03.交换律:A ^ B = B ^ A4.结合律:(A ^ B) ^ C = A ^ (B ^ C)因为题中已说明,其余元素都出现了两次,所以,遍历一遍数组,将所有元素进行异或,得到的结果就是只出现一次的那个数。class Solution {public: in...

2019-05-25 19:10:12 233

原创 Leetcode 220. 存在重复元素 III 解题思路及C++实现

解题思路:使用set集合来实现滑动窗口k,对窗口内的数进行比较,得到结果。使用两个指针i、j,来确定窗口位置,i走在前面,j在后面。因为数组内这两个数的差值绝对值限制为:| x - nums[i] | < t,所以,有 nums[i] - t < x < nums[i] + t,所以,我们要在set s中找到nums[i] - t所在的位置,如果找到了,说明窗口内有满足这...

2019-05-25 18:47:31 292

原创 Leetcode 179. 最大数 解题思路及C++实现

解题思路:使用C++中的优先队列priority_queue,通过自定义比较函数cmp,来对nums数组进行排序。最后按排序结果,顺序将nums中的数push_back进字符串res中,即得到结果。class Solution {public: string largestNumber(vector<int>& nums) { if(n...

2019-05-25 15:13:51 524

原创 Leetcode 148. 排序链表 解题思路及C++实现

解题思路:对链表进行归并排序,使用 fast 和 slow 两个指针,遍历一次链表,就能将链表切分为两半,然后使用归并排序的方法。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : ...

2019-05-25 13:31:02 238

原创 Leetcode 147. 对链表进行插入排序 解题思路及C++实现

解题思路:这道题目,如果不借助其它stl工具,只是使用本身的ListNode的话,最主要的一个问题是,每次找插入位置的时候,没有办法进行从后往前回溯,所以只能从head头结点往后比较,然后找出应当插入的位置为tmp_last之后。程序的大循环是遍历一次整个链表。cur表示当前访问比较的节点,用last记录cur的上一个节点。每一次去找插入的位置,从head开始往后,进行比较,找到的插入位置...

2019-05-23 14:51:29 272

原创 Leetcode 350. 两个数组的交集 II 解题思路及C++实现

解题思路:和349. 两个数组的交集这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单。先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就push_back进res数组中,这里也不用跳过重复的数字。class Solution {public: vector<int> intersect(vecto...

2019-05-19 14:53:45 287

原创 Leetcode 349. 两个数组的交集 解题思路及C++实现

解题思路:先对数组进行排序,然后从小到大去找相同的元素。程序大循环是遍历两个数组。循环体内,当找到相等的数之后,要注意跳过重复的数字。class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {...

2019-05-19 14:43:03 236

原创 Leetcode 242. 有效的字母异位词 解题思路及C++实现

方法一:排序解题思路:C++中,直接用sort函数,对两个字符串进行排序,然后做比较。class Solution {public: bool isAnagram(string s, string t) { //直接对string做排序 sort(s.begin(), s.end()); sort(t.begin(), t.e...

2019-05-19 14:12:51 350

原创 Leetcode 392. 判断子序列 解题思路及C++实现

解题思路:使用贪心算法,每在字符串t中找到s的相应顺序的一个字符,就当做找到了该字符,然后接着去找后面的字符。程序大循环:在字符串 t 中去寻找字符串 s 的第一个字符。每当找到 s 的起始字符,就开始用贪心的思想去匹配字符串 s 和 t 。class Solution {public: bool isSubsequence(string s, string t)...

2019-05-19 13:53:26 507

原创 Leetcode 376. 摆动序列 解题思路及C++实现

解题思路:使用贪心算法的思想。在例子 [1,17,5,10,13,15,10,5,16,8]中,[1, 17]、[17, 5]这前面的两个序列就直接都选择了,没有问题,对于后面[5, 10, 13, 15]这样的子序列,数值连续增大,则利用贪心的思想选取差值最大的两个数,即[5, 15],删除(不选)数字10和13,再往后的序列[15, 10, 5],同理,选择[15, 5],这样一次遍历...

2019-05-19 13:18:08 510

原创 Leetcode 134. 加油站 解题思路及C++实现

方法一:直接暴力方法解题思路:当 gas[i] >= cost[i] 时,这个加油站才可能是个出发点,遍历gas容器(数组),当出现 gas[i] >= cost[i] 时,看看以这个加油站为出发点,是否满足条件,即执行函数whetherEnough,如果满足,就得到结果了,返回索引 i 即可,否则,继续寻找下一个可能的出发点。在whetherEnough函数中,因为是个环...

2019-05-18 15:05:46 483

原创 Leetcode 860. 柠檬水找零 解题思路及C++实现

解题思路:程序逻辑:遍历bills容器(数组),使用unordered_map记录手中的5美元和10美元的数量(无需记录20美元,因为不可能将20美元找零出去)。循环体内程序:每当遇到一个5美元,则相应数量加1;当遇到一个10美元时,判断手中是否有5美元,没有的话就return false,有的话就将5美元数量减1,10美元数量加1;当遇到20美元时,有两种找零情况:找一张10...

2019-05-18 13:20:21 510

原创 Leetcode 455. 分发饼干 解题思路及C++实现

解题思路:这道题跟“田忌赛马”是一样的,对于孩子的胃口、饼干的尺寸这两个容器(数组),先进行排序,然后尽量用小尺寸的饼干满足小胃口的孩子,所以会用到贪心策略。因为题目中并没有说明容器(数组)g和s是否已经是排好序的,所以先进行排序。给这两个容器各设置一个指针,表示当前遍历的孩子编号、饼干编号。程序循环停止条件:遍历了所有的孩子,或者遍历完所有的饼干,表示无法再进行分配了。循环体...

2019-05-18 12:49:29 584

原创 Leetcode 122. 买卖股票的最佳时机 II 解题思路及C++实现

解题思路:采用贪心策略,只要后一天的价格高于前一天,就将差价加进来。得到的结果就是能获取的最大利润。class Solution {public: int maxProfit(vector<int>& prices) { //输入为空 if(prices.empty()) return 0; ...

2019-05-18 12:30:32 367

原创 Leetcode 451. 根据字符出现频率排序 解题思路及C++实现

解题思路:先使用unordered_map对字符串s中字符,进行频数统计;再使用最大堆,对unorder_map进行排序;接着将排序结果存在结果字符串res中。class Solution {public: string frequencySort(string s) { //使用unordered_map统计字符串s中个字符的出现频数 ...

2019-05-17 22:01:37 486 2

原创 Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现

解题思路:使用一个最大堆遍历matrix中的数。保持最大堆中的元素数量不超过k,最后得到的堆顶元素值就是第k小的数。class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { priority_queue<int> p...

2019-05-17 21:36:59 315

原创 Leetcode 373. 查找和最小的K对数字 解题思路及C++实现

解题思路:使用最大堆来存储k个和最小的数组组合,然后每进来一个数组组合,只需要和最大堆的堆顶进行比较即可。用C++的priority_queue实现最大堆时,需要用一下pair来组合来自nums1和nums2数组的数,然后自己写一个比较结构体cmp,比较数组和的大小。在循环中的一个trick在于,限制为访问nums1和nums2的前k个数即可。所以那一部分的时间复杂度为O(k*k)。...

2019-05-16 22:31:39 656 1

原创 Leetcode 347. 前K个高频元素 解题思路及C++实现

方法一:最小堆解题思路:先使用一个unordered_map来遍历nums容器,得到每个元素对应的频数。再使用最小堆,对unordered_map中的频数进行遍历,得到k个最大的频数对应的<频数,元素>对。最后将最小堆中的元素push_back进结果容器res中。class Solution {public: vector<int> t...

2019-05-16 14:07:21 512 1

原创 Leetcode 313. 超级丑数 解题思路及C++实现

解题思路:与Leetcode 264. 丑数 II的解题思路一样,均使用最小堆来存储丑数,第i次更新最小堆时,得到第i大的丑数。可结合Leetcode 264. 丑数 II的解题思路理解:https://blog.csdn.net/gjh13/article/details/90247437class Solution {public: int nthSuperUgl...

2019-05-16 10:45:03 389

原创 Leetcode 264. 丑数 II 解题思路及C++实现

方法一:暴力解法解题思路:直接从整数1开始,不断递增,判断该数字是否为丑数(专门写一个判断是否为丑数的函数),当遇到一个丑数,则计数值加1,直至遇到n个丑数为止。当n很大时,这种暴力解法会遇到 超出时间限制的问题,代码如下:class Solution {public: int nthUglyNumber(int n) { int i = 1; ...

2019-05-15 23:31:42 417

原创 Leetcode 215. 数组中的第K个最大元素 解题思路及C++实现

解题思路:用最小堆来存储k个最大的值,遍历一次nums容器,然后返回最小堆中最上面节点的值即可。C++中使用priority_queue来实现最小堆。代码如下:class Solution {public: int findKthLargest(vector<int>& nums, int k) { priority_queue&l...

2019-05-15 23:01:28 290

原创 Leetcode 703. 数据流中的第K大元素 解题思路及C++实现

解题思路:使用一个最小堆来存储数据,在C++中,对应是#include<queue>头文件中的priority_queue。程序逻辑:KthLargest类初始化的时候,先根据nums容器中的数,生成包含k个数的最小堆;然后在每一次add操作的时候,更新最小堆,并返回根节点,即最上面的元素。C++中STL里的priority_queue用法可参考网址:https://blo...

2019-05-15 22:53:17 235

原创 Leetcode 173. 二叉搜索树迭代器 解题思路及C++实现

解题思路:使用中序遍历,将二叉搜索树的所有节点值依次push进队列中。每调用依次next函数,即返回队首元素,并pop。hasNext函数只需判断队列是否为空即可。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * T...

2019-05-14 19:45:21 188

原创 Leetcode 150. 逆波兰表达式求值 解题思路及C++实现

解题思路:使用一个栈来存储待计算的数字,当遇到符号时,则将栈顶的两个元素pop出来,计算得到新的数字,然后再push进栈,大循环内,每循环一次,就访问了容器中的一个string。大循环停止条件:遍历完容器中的所有string。class Solution {public: int evalRPN(vector<string>& tokens) { ...

2019-05-14 18:18:43 624

原创 Leetcode 144. 二叉树的前序遍历 解题思路及C++实现

解题思路:这道题目的解题思路与中序遍历一模一样,区别只在于输出结果放在push进栈之前。程序的大循环是遍历整个树,所以循环停止条件是:栈为空,且当前访问节点root为NULL,这时说明所有的跟节点都访问过了,且最后一个右节点也访问过了。大循环内,当存在左节点时,则一直向左探索,在将当前节点push进栈之前,需要先将当前节点的val存在结果中,这样才是前序遍历。当root为NULL了...

2019-05-13 23:01:47 323

原创 Leetcode 103. 二叉树的锯齿形层次遍历 解题思路及C++实现

解题思路:因为是逐层的访问,在访问某一层的节点时,需要将其子节点push进栈,所以自然而然地想到用两个栈a和b。因为是锯齿形的访问顺序,所以,如果将根节点当做第一层,奇数层与偶数层的进栈区别在于:奇数层节点的左子节点先进栈,右子节点后进栈,访问偶数层节点时,顺序相反,详细可看下面的代码。下面的程序中,使用了一个flag来判断是奇数层还是偶数层,没循环一层,flag做一次正负反转。大循环的逻...

2019-05-13 22:16:52 377

原创 Leetcode 94. 二叉树的中序遍历 解题思路及C++实现

解题思路:中序遍历的顺序是:左根右。所以需要使用一个栈来存储根节点(每一次push操作时,都相当于把该节点当成根节点了,然后再向其左节点探索)。程序中的大循环是:!s.empty() || root != NULL。栈非空,说明仍有根节点未被push_back进结果容器中,当栈为空时,说明最后一个根节点(逐个push上的最后一个,是指逻辑顺序上的最后一个)及其左子树的节点均被访问和输出,但...

2019-05-10 23:29:54 240

原创 Leetcode 844. 比较含退格的字符串 解题思路及C++实现

解题思路:使用两个栈a和b,分别存储字符串S和T对应的结果,然后再逐个比较栈a和b的元素,之后需要加一个判断是否会有某一个栈非空,如果有其中一个栈非空,则返回false,否则返回true。class Solution {public: bool backspaceCompare(string S, string T) { stack<char>...

2019-05-10 22:49:10 248

原创 Leetcode 682. 棒球比赛 解题思路及C++实现

解题思路:这道题比较简单,就是直接用一个stack,依次处理输入容器中的每一个字符串,要注意的是:将string转为int,C++中函数为stoi();class Solution {public: int calPoints(vector<string>& ops) { int res = 0; //一定要初始化为0 ...

2019-05-09 21:28:46 403

原创 LeetCode 496. 下一个更大元素 I 解题思路及C++实现

解题思路:因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n)。如果使用暴力的方法:对nums1中的每个int,在nums2中去找下一个更大元素,时间复杂度将会是O(num1.size() * nums2.size()),太过暴力。使用一个unordere...

2019-05-09 20:55:27 368

原创 开启LeetCode之路

终于有时间开始每天坚持做LeetCode题,博主现在以在CSDN上撰写解题思路为自我监督方式,坚持每天将当天的题目的解题思路记录下来。LeetCode刷题路线:博主将计划按tag顺序做题,先以简单和中等难度为主。编程语言:博主选择用C++来解题并记录。共勉~第一部分:栈2019-05-09:Leetcode 232. 用栈实现队列 :https://blog.csd...

2019-05-09 14:53:02 662

原创 Leetcode 232. 用栈实现队列 解题思路及C++实现

解题思路:使用两个栈,一个栈a用来存储每一次操作得到的队列,另一个栈b作为辅助栈。在每一次push操作的时候,先把a中排好的队列(先进先出),依次push进栈b,所以,栈b中元素的排序就是后进先出的栈顺序; 然后把新的元素x push进栈b,整个栈b就是后进先出的栈顺序; 然后再把b中的元素依次push进栈a,得到的栈a就是先进先出的队列顺序。class MyQueue {...

2019-05-09 14:47:10 382 2

IEEE 802.15.4标准文档 2015年

IEEE 802.15.4标准文档2015年,官网也可以下载,由于现在CSDN不能分享0积分的资源,所以只能设置为1积分下载了。大家要是觉得不划算,就去找找官网的资源吧~

2018-06-02

Windows将下位机串口传输数据存储在txt文件并显示的VS2010工程及exe程序

这是用VS2010+Mscomm控件编程实现了串口调试助手的代码,并能把下位机串口通过串口发送过来的数据存储在电脑F盘的data.txt文件中(具体位置和文件名可自己改),具体一步一步是怎么实现的,可以参考我的博客:https://blog.csdn.net/gjh13/article/details/80409538。从VS的下载安装开始讲起,非常详细的介绍,给大家排坑。有问题可CSDN私信我~

2018-05-22

基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)

本人将RSSI室内定位的matlab仿真分为8步(具体看代码文件夹中的readme.text),readme.text是代码使用教程,代码有很多注释,可结合我博客中的原理来理解,具体可看博客 https://blog.csdn.net/gjh13/article/details/80388532

2018-05-21

LaTeX教程:一份不太简短的 LATEX 2ε 介绍

这是最常见的LaTeX入门书ishort的中译本。

2018-05-14

机器学习实战(中文版)及源代码

其他人分享出来的都太贵了,我这只需最少的2分。机器学习实战及其源代码,想自学的同学不容错过~

2018-01-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除