自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 pandas学习之数据的建模与评价

前面几天已经将数据全部处理完ta毕,并熟悉了pandas处理数据的基本操作。最后就使用sklearn库来最终解决这个问题,分析测试集中哪些人可以存活。首先将训练集做去空处理,清理掉训练集中的空数据。pandas中,mean()函数就是求平均值的意思。之后再对数据进行转码,转换为one-hot便于分析。如果数据集本身并不是随机取样的,比如按照时间先后收集或者先收集高等舱再收集低等舱,就需要随机选取,使得各种样本充分混合。切割数据集方面,python语法允许用元组同时给多个元素赋值,而.

2020-08-27 22:27:06 438

原创 pandas数据分析之数据可视化

从DataFrame表格中不易发现数据的特征,可以通过将数据制成图表的方式使数据更直观,从而更方便的分析数据。pandas没有作图功能,但是可以适配matplotlib和seaborn之类的作图库。导入作图库进行数据类型转换,即可画出图像。pandas内置的plot可以将DataFrame对象转换为制表数据,之后利用matplotlib的plt.show(),就可以作图。之前学习了unstack函数与stack函数,其实unstack函数除了处理stack()函数返回的数据之外,还有一种用法

2020-08-25 20:35:26 1320

原创 pandas打卡学习之数据重构

有时候,用于处理的数据可能是分块保存的,有可能保存在多个文件中。这时候,就需要使用连接方法pd.concat()进行连接。concat()方法需要指定轴,默认是y轴连接,如果需要x轴连接,可以指定axis=1。同时,也可以使用join函数进行合成。其中join是横向连接,而append函数是将参数传入DataFrame的纵向追加到源数据。concat使用的是等值连接,键默认为第一列,也可以指定。如果两列表数据没有共同的列,也会成功进行纵向连接,缺失数据会记为NaN接下来学习Stack

2020-08-23 21:37:08 243

原创 pandas数据分析打卡学习之数据的清洗

导入了数据,并对数据做完初步分析之后,我们知道数据导入之后按照DataFrame这个数据结构进行存储。知道了DataFrame的一些基础操作之后,再来练习一下DataFrame一些更高级的选择操作。清洗数据,也就是处理重复的或者空的数据,还要对字符型之类的数据进行转换。而处理数据当然要先选择待处理的数据。先来看一下DataFrame的选择机制。dataframe类应该是对于[]进行了多次重载,如果[]内填的对象不同,程序也会智能的识别语义进行选择。具体选择方法有以下几种。首先就是使用列名列表来进

2020-08-21 16:43:22 268

原创 pandas学习之数据加载即探索性数据分析

数据分析的一个重要包就是pandas。这里通过使用机器学习来做kaggle上的一个任务来学习pandas的使用,以及数据分析常用的一些编程方法与技巧。首先导入pandas包和numpy包,这里因为我使用了anaconda环境所以没有必要再进行pip安装了。然后再来讲解一下csv文件格式。从编码压缩方式来看,csv首先也是一种文本文档,而扩展名“csv”的意思就是这个文本文档里面记录的是以逗号或者其它符号分割的数据。所以打开csv文件当然可以使用python自带的输入输出流+管道读取(最简陋),也

2020-08-19 21:50:55 391

原创 算法练习之“匹配”类题目

“匹配”类的题目,有以下几个LeetCode10正则表达式匹配:https://leetcode-cn.com/problems/regular-expression-matching/LeetCode44通配符匹配:https://leetcode-cn.com/problems/wildcard-matching/LeetCode72编辑距离:https://leetcode-cn.com/problems/edit-distance/不是很明显,但是可以归为一类的这个:https://

2020-05-13 21:40:55 771

原创 LeetCode算法练习之通配符匹配

上次的正则表达式匹配就是使用的动态规划的方法,不过上一次因为写完程序太晚了,就没有想自下而上填表法实现的动态规划。这次就直接使用填表法来解决问题吧。上次的分析同样可以套用到这次的问题中。我们使用了一个二维数组来储存每个小问题的答案,现在我们分析一下递归过程,就可以得出自下而上的填表法解决方案。这张图中,箭头表示递归函数的调用顺序。想要得到[0,0]处的值,就必须要知道[1,1]的值。...

2020-03-30 20:41:45 259 1

原创 LeetCode算法练习之加油站

这个问题比较麻烦,需要我们仔细审题,做出猜想,然后验证猜想。我们先将问题简化一下,经过一个加油站需要加油,同时也要耗油。不如将这两个量合并成一个量,就是gas[i]-cost[i],也就是油量的变化量。首先做出猜测,如果油量大于耗油量,是否就一定可以到达终点?可以使用反证法,假设从最优出发点ai出发,到达ak没油了没法继续开了,那么数组可以分为三部分。ai...an,a1...ak,a...

2020-03-29 19:29:16 359

原创 LeetCode算法练习之反转整数

非常简单的一道题目,为了判断是否溢出我使用了long类型得了两个100.这样其实算是作弊了,没有满足实际要求,还是官方的判断方式靠谱。if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev...

2020-03-28 22:59:48 121

原创 LeetCode算法练习之跳跃游戏

这道题目看到后很明显可以用动态规划解决,是一个经典的动态规划例题。代码非常好写,用一个列表存储数据,然后从后往前填充这个列表就可以了。但是到达最后一组测试数据的时候超时了。 这时候我发现了这个算法的问题。第一个数是25000,程序如果一开始就读第一个数,就可以直接判断出程序可以到达终点。就不用从后往前判断了。于是就有了另一种更加快捷的解法。用一个变量来记录能跳到最远的距离,然后遍历...

2020-03-28 12:13:36 145

原创 LeetCode算法练习之分发饼干

这个问题策略很简单,就是给每个孩子分配能满足他的最小的饼干。所以我们把两个数组排序,如果当前饼干可以满足当前孩子,就把饼干给当前孩子,否则饼干就不用用更大的一块满足。class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) { ...

2020-03-27 17:37:02 217

原创 LeetCode算法练习之判断子序列

这是编程基础入门题吧。。。真的是简直不能再简单了。class Solution {public: bool isSubsequence(string s, string t) { int p=0; for(int i=0;i<t.size();i++){ if(t[i]==s[p]){ p...

2020-03-26 17:20:25 194

原创 LeetCode算法练习之恢复二叉搜索树

这个题目正常解不难,难的是需要常数空间的解法。所以说,不管是递归还是迭代,都无法满足这个题目的需要。只能像有的链表那样从树中搜索,原位修改。实在想不出解题思路了,还是对时间复杂度了解的多,空间复杂度了解的少,看了题解写出的代码。。。/** * Definition for a binary tree node. * struct TreeNode { * int val;...

2020-03-24 17:06:48 132

原创 LeetCode算法练习之不同的二叉搜索树II

分析题目,假设我们输入的是5,那么有一部分答案就是这样的:这时很明显原问题的解取决于部分问题的解。故马上想到使用递归来求解。继续分析问题,我们先选择一个根,比如2,然后以2为节点生成二叉搜索树。2的左子树可以是小于2的数生成的任意二叉搜索树,右子树是大于2的数生成的任意二叉搜索树。有了这个思路,就可以编写出代码了。/** * Definition for a binary tr...

2020-03-23 21:34:41 205

原创 LeetCode算法练习之最小栈

这道题目比较麻烦涉及查找。一开始思路局限在了优先队列上。但是优先队列不管怎样插入的时间都不是常数时间所以需要换别的结构。考虑到栈的特点,每次只能查看栈顶的元素,也只能移除栈顶的元素。这时我们讨论一下,如果栈顶的元素不是最小值,则最小值不变,如果是,则最小值变成前一个最小值。实际上这个题想到这就很容易想出需要用一个辅助栈来解决。class MinStack {public: /*...

2020-03-22 19:30:52 157

原创 LeetCode算法练习之逆波兰表达式

这道题目同样是栈的一个应用典范。通过读题,非常明显计算就是一个栈的轨迹。遇到运算符出栈,遇到操作数就入栈。。。class Solution {public: int evalRPN(vector<string>& tokens) { if(tokens.size()==0) return 0; stack<int> s...

2020-03-22 19:19:14 222

原创 LeetCode算法练习之二叉树的前序遍历

前序遍历,中序遍历,还有后序遍历,这个“前,中,后”指的就是父节点的位置。前序遍历,就是把父节点放在最前面。其实大多数时候我们都是使用的前序遍历。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right...

2020-03-22 18:34:07 205

原创 LeetCode算法练习之二叉树的最大深度

同样是递归,选择左右两棵树中更深的一个加一,就可以算出该树的最大深度。递归的终止条件是树根节点为空,这时返回0.两行代码,一步到位。这道题会递归的话其实非常简单的。也可以一行代码解决,像这样:return root==nullptr? 0:max(maxDepth(root->left),maxDepth(root->right))+1;...

2020-03-21 11:16:50 172

原创 LeetCode算法练习之对称二叉树

这次还是和上回一样,同样是遍历整个二叉树,使用递归进行深搜即可。这里有一个特殊思路就是把初始的二叉树拆成两个,然后判断这两个是否对称。因为这样才可构成递归问题。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode...

2020-03-20 22:19:57 112

原创 LeetCode算法练习之相同的树

对于遍历树的问题,树属于一种特殊的图,遍历树也是一种特殊的搜索。想到搜索就想到深度优先,于是这里就可以用递归来求解这道题目,问题十分简单,我甚至都没有使用额外的变量,就把程序写出来了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...

2020-03-19 15:25:54 96

原创 LeetCode算法练习之正则表达式匹配

说实话,这个题目确实是到目前为止练习的最难的一道题目,但是也是意义非常重大的一道题目,它点明了动态规划的原理。首先,我们仔细审题,先进行第一步思考,a*表实可以有0个a,也可以有任意个a,这样就可以把p转换成多个字符串,只要s和其中一个相等,就可以匹配。再深入想想,其实正则表达式匹配是一个“策略”的问题。比如s="aaa",p="a*a",时,就有各种匹配方式。其中有的可以匹配,有的不能匹...

2020-03-18 21:39:27 148

原创 LeetCode算法练习之最长回文子串

这道题目,我想了非常久,但是就是没有得到时间复杂度为O(n)的算法,只能用一个O(n^2)的算法先实现一下。先看了评论区,这道题想出O(n)的算法比较难想,其他算法最好的时间复杂度也是O(n^2),看来就需要两遍循环。这时思路就有了,第一层遍历整个字符串,找到回文中心的位置,第二层向两边扩展,判断回文的长度。class Solution {public: string long...

2020-03-17 18:28:14 109

原创 LeetCode算法练习之无重复字符的最长子串

同样是双指针法,一个指针使得字符串变长,一个使得字符串变短。分析问题可知我们可以让两个指针都从字符串开头开始,然后都向右移动。满足条件,就移动右指针使得字符串变长看看是否还满足条件,一旦条件不满足,就移动左指针使得字符串变短,满足条件。求解这道题,还利用了字符字典。但是这里的字典由于键只有固定的26个英文字母,可以使用简化的散列表(就是一个数组)来进行查询,在常数时间内判断出字符串内是否存在这...

2020-03-16 21:29:19 109

原创 LeetCode算法练习之有效的括号

编译器在编译的时候,就会使用栈来做运算,存储运算符,分配运算顺序。所以说,语义分析方面的问题,很多都与栈这种数据结构有关。分析这道题目,假设我们在做数学题算式子,去括号的时候必须去掉里面的括号,才能去外面的括号。这道题也一样,先去除里面的括号,再去除外面的,如果所有的括号都可以去除,最终没有括号了,就说明有效。反之如果有括号没法去除,或者删不干净,就是无效的。由于去括号的时候,判断括号是否...

2020-03-15 12:35:28 227 1

原创 LeetCode算法打卡之最长公共前缀

这个题目也没什么好说的,就是按位依次匹配,第一位全相等,就加入结果,直到第n位不相等的时候跳出循环。class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.size()==0) return ""; if(strs.si...

2020-03-14 11:39:01 102

原创 LeetCode算法练习之罗马数字转整数

这道题目不难,就是麻烦,分析好条件一步一步去匹配就好。class Solution {public: int romanToInt(string s) { int strLength = s.size(); int res = 0; for(int i=0;i<s.size();i++){ if(s[i]...

2020-03-13 22:35:27 114

原创 LeetCode算法练习之合并k个有序链表

之前是合并两个,这次的题目是合并k个有序链表,当然也可以用两个的思路去做,比较每个链表中当前的那个值,把最小的加入返回链表中,最后得到的就是合并之后的链表。每一次合并都要检查所有的链表,最终时间复杂度是O(nk)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListN...

2020-03-12 19:26:11 375 2

原创 LeetCode打卡练习之删除链表的倒数第N个节点

这道题目也十分简单,但是用的方法非常重要,在链表操作中也有大应用。删除链表倒数第N个节点,可以使用快慢指针法,快指针先出发,到达N时慢指针出发,快指针到达终点时,慢指针就会到达倒数第N个节点。其实链表很多情况下都可以用“运动学”知识来解题,比如同样的取排序链表中位数也可以让快指针速度是慢指针两倍。但是,这个题目有一个问题,删除链表节点我们用的是p1->next=p1->next...

2020-03-11 22:07:09 98

原创 LeetCode算法练习之两数相加

没什么可说的,就是一位一位来运算,类似人手算加法的过程。。。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class So...

2020-03-10 19:36:49 161

原创 LeetCode算法打卡之环形链表

题目要求查找链表中是否有环,因为每个链表节点都有唯一的标识符——地址,我们可以使用一个储存地址的散列表来做,每经过一个节点,就把这个节点的地址记录到散列表中,同时查找散列表中是否有相同的地址。如果有,就说明指针又指回了之前经过的节点,于是链表有环。如果指针最后到了末尾,变成了空指针,则链表没有环。实现如下:/** * Definition for singly-linked list....

2020-03-09 22:22:46 122

原创 LeetCode打卡练习之删除链表中的重复元素

这道题也是考察链表的操作,删除链表中的元素非常简单,只要将前一个链表节点的指针指向下一个链表节点就好了。所以,下面这段程序就可以实现这个方法。通过程序我们也可以看出,在链表中任意位置插入删除元素,都不需要变动链表中其他的元素,而数组则需要把后面的元素整体向前移动一位。这就是链表相比于数组的另一大优势。/** * Definition for singly-linked list. * s...

2020-03-08 15:09:58 150

原创 合并两个有序链表续

上一篇文章里面做题熟悉了指针、分配内存和链表的操作,链表的实现需要使用指针,C++里面有指针,所以可以很直观的实现,但是还有很多编程语言比如java,python,C#里面没有指针的概念,这些语言是怎么实现链表这种数据结构的呢?复习一下堆与栈的概念。C++中,一个程序使用栈内存的大小必须是固定的,程序刚开始运行时,就会通知操作系统分配足够的栈内存。而因为栈内存大小有限,所以栈内存不能在程序运行...

2020-03-07 23:08:54 107

原创 LeetCode算法练习之合并两个有序链表

这道题其实和合并两个排序数组的思路是一样的,只不过把数组换成了更加复杂一点的链表。与其说这是一道算法题,不如说这道题目考察的还是基础的指针和链表的使用操作方面的知识。在C++中,链表是通过结构体实现的,这个结构体中包括节点的值,和指向下一个节点的指针。操作链表之类的结构时,基本上就是全程依靠指针进行操作了。还有就是介绍一下new函数,这个函数是C++中手动申请内存空间使用的函数,执行new...

2020-03-07 12:38:04 208

原创 LeetCode打卡练习之股票买卖的最佳时机3

这道题目可以算是一道经典而又比较简单的动态规划问题了。根据算法导论中的介绍,我们可以先来分析一下最优解的构成:两次交易没有重合区域,所以可以假定一个分界线,分界线左边的解是左边部分的最优解,而分界线右边部分的解也是最优解。求得这两个区域最优解的办法,就是股票买卖最佳时机1这道题目的解法。所以说,为找到问题的答案,我们需要确定两个“最优”,先找到分界线的位置,再算出分界线左右两边的最优解。...

2020-03-06 20:18:40 147

原创 LeetCode打卡练习之买卖股票的最佳时机2

分析题目,这个题目其实就是判断何时买入卖出,根据逻辑常识我们也知道应该在谷底买入,峰值卖出,把逻辑表达为程序,就是这样。其实这道题目属于贪心算法,每步取最优方案,就可以得到总问题的最优解。class Solution {public: int maxProfit(vector<int>& prices) { int res=0; ...

2020-03-06 18:15:39 184

原创 LeetCode算法练习之最接近的三数之和

这个题目和之前的三数之和问题是一样的解法,但是需要求的是最接近的和,说明此时散列表已经完全不管用了,只能用双指针来解。双指针思想和之前的一样,也是右指针左移动使答案变小,左指针右移动使答案变大。不同的是我们回想一下双指针法的遍历轨迹,每一步都在向结果最接近的方向发展,所以直接加一个offset变量来记录最小值就ok ,并使用一个sum来储存最终答案。class Solution {pu...

2020-03-05 11:31:18 210

原创 LeetCode算法练习之三数之和

和之前的两数之和问题一样,这个问题也可以直接三重循环直接莽穿,但是这算法时间复杂度太大了,O(n^3)的时间复杂度一旦遇到1000位的数组就要循环10亿次,几万位的话时间够泡一杯java了。这个问题有两种解法,时间复杂度都是O(n^2),包括散列表查找法和双指针法。散列表法当然就是之前搞两数之和算法的最优解法,然而幸亏我提前看了讨论区说明这种方法会超时,就没有试验,不然就会写老半天程序最...

2020-03-04 21:14:53 289

原创 LeetCode算法练习之买卖股票的最佳时机

这个题目其实在《算法导论》中有过描述,书中使用的是分治算法进行的求解。具体过程看书就可以了。书中是伪代码,这里把真正的代码写一下。分治法在使用时比较麻烦,最麻烦的就是如何处理递归的终止条件,以防止死循环或者forkbomb。这里终止条件是lo>=hi-1,就是说,lo和hi之间必须间隔两个及以上的元素。(其实用hi-lo<=1可能更好理解)这个式子是怎么得到的,就要具体的分析下奇数...

2020-02-27 11:42:50 288

原创 LeetCode算法练习之合并两个排序数组

这道题目真的没什么可说的,就是一个归并排序的部分操作。想要了解原理可以查一下归并排序,简单来说就是挑两个数组中较小的一个插入数组中。了解归并排序原理,这篇文章讲的比较好,分享过来推荐看一下:https://mp.weixin.qq.com/s?src=11&timestamp=1582719465&ver=2182&signature=1pIvRaP0N-bCnj5...

2020-02-26 20:18:46 368

原创 LeetCode经典题目之滑动窗口与双指针法的使用

题目位置:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/之前一篇文章中记录了双指针法。这里再来详细的介绍一下双指针法。双指针法的时间复杂度一般是O(n),可以作为暴力二次循环的优化解法。利用双指针法可以不用遍历每个子数组而只要循环数组一次或者两次。有点类...

2020-02-25 11:19:41 287

空空如也

空空如也

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

TA关注的人

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