自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MuseCP@YenTown

爱看看,不看滚

  • 博客(18)
  • 收藏
  • 关注

原创 59. Spiral Matrix II的C++解法

和 Spiral Matrix I用了一个方法,遇到边界和赋过值的地方就拐弯。但是速度比较慢。  class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int>> res(n, vector<int>(n))...

2018-09-28 17:05:57 219

原创 54. Spiral Matrix的C++解法

本来还是想用步长来决定多久转一圈,但是发现最终的结束条件没有想象得那么好控制,写起来也麻烦。于是新想了一个算法,走到边界或者已经走过的地方就拐弯。代码投机取巧了一下,直接在原矩阵上把走过的改为-100(测试数据里没有这个值),稳妥的话应该另外建一个数组记录。 class Solution { public: vector<int> spiralOrder(vector&lt...

2018-09-28 16:22:46 225

原创 406. Queue Reconstruction by Height的C++解法

先把people按照第一项降序排列(第一项一样的按第二项升序)。然后重新插入即可。其中要注意的是重写了sort的比较规则,写在一个class内需要在函数前加static。  class Solution { public: static bool cmp(pair<int, int> a, pair<int, int> b) { if (a.fir...

2018-09-27 16:07:52 121

原创 442. Find All Duplicates in an Array

给的条件是 1 ≤ a[i] ≤ n (n = size of array),第一反应就是在下标上做文章。方法一:如果数字和下标不对应则把数字换到对应的下标那里,循环一遍后下标和数字不对应说明不存在下标的数字,下标中存的一定是重复的。但是我不确定时间复杂度是O(2n)还是可以约等于O(n)。class Solution {public: vector<int> f...

2018-09-26 15:08:58 141

原创 885. Spiral Matrix III的C++解法

模拟转圈即可。假设图纸无限大(可以越界),只有真正落在给出的棋盘范围的坐标才被记录下来。转圈有两个规则:1.步长从1开始,每走两个方向则步长增加1;2.每走完一个步长,方向换一个;我用了一个参数d记录走了多少步。d被2整除的时候说明要增加步长,接下来要走的方向是(d%4)。速度打败100%。 class Solution { public: vector<vecto...

2018-09-26 13:37:08 203

原创 791. Custom Sort String的C++解法

先根据S给一个比较大小的字典,然后再把T排序。 class Solution { public: string customSortString(string S, string T) { string res = ""; map<char,int> index; for (int i = 0; i < S.length(); i++) index[...

2018-09-25 15:56:06 244

原创 701. Insert into a Binary Search Tree的C++解法

简单的递归。 class Solution { public: TreeNode* insertIntoBST(TreeNode* root, int val) { if (root == NULL) { TreeNode* thisnode = new TreeNode(val); return thisnode; } else{ if (val > roo...

2018-09-25 14:32:49 224

原创 338. Counting Bits的C++解法

 一开始只看到要求线性时间空间复杂度,就去找规律。找到的规律是 数字i中含有1的个数=1 +(i-比i小的最大的2的幂)。 class Solution { public: vector<int> countBits(int num) { vector<int> res = { 0 }; if (num == 0) return res; ...

2018-09-21 15:16:44 101

原创 419. Battleships in a Board的C++解法

1.设置一个与矩阵同样大小的布尔数组exits,用于表示某一个位置是否已经被访问过。2.遍历矩阵的每一个位置,如果是标志船的’X’并且该位置没有被访问过,就增加船的数目,然后通过DFS算法把整个船找到,并且把船的所有位置都设为已访问。 3.最后返回找到的船的数目。我的代码在leetcode上显示数组访问越界,但是在lintcode上过了。不知道哪组测试数据有问题。class Solu...

2018-09-20 15:15:34 131

原创 537. Complex Number Multiplication的C++解法(string和int互转)

class Solution { public: string complexNumberMultiply(string a, string b) { int pa = a.find('+'); int pb = b.find('+'); int x1 = atoi((a.substr(0, pa)).c_str()); int x2 = atoi((b.subs...

2018-09-19 15:58:37 136

原创 894. All Possible Full Binary Trees的C++解法

这个问题还是常规的递归问题,不太一样的是每个整数都将会返回一个vector<TreeNode*>。所以找到这个vector之后需要再用两个for循环遍历所有的左右子树可能的组合。几个注意事项:1.完全二叉树一定是一个奇数,所以偶数可以直接返回空。2.一棵完全二叉树的左右子树都是技术,所以遍历的时候不是i++而是i+=2。3.vector在建立后,如果没有初始化值,不可以...

2018-09-18 15:52:05 138

原创 RNN,LSTM和GRU

结构图:https://blog.csdn.net/gzj_1101/article/details/79376798https://blog.csdn.net/wangyangzhizhou/article/details/77332582作用原理:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=22474867...

2018-09-18 11:29:40 187

原创 763. Partition Labels的C++解法

1.从第一个字母开始,找到它最后一次出现的位置,那么这一段就是当前最短的一节(因为一节需要把同一个字母全都包含进去)。但是在这一节中如果有别的字母在之后又出现了,这一节的长度需要延长到那个字母最后一次出现的位置。2.同一个字母第一次遇到的时候其首尾之间的距离将是最大的,所以一个字母只要找一次记下来即可。算法主要分为两个循环,第一个循环找到每个字母的首位最大距离(记录头和尾)。第二个循环顺序...

2018-09-17 14:48:41 137

原创 797. All Paths From Source to Target的C++解法

相当于图的深度优先遍历和广度优先遍历。我AC的代码是深度优先的。要注意的是,因为用了一个全局变量path记录当前路径,所以回退的时候要手动pop一下。class Solution {public: vector<vector<int>> res; vector<int> path; vector<vector<int>> a...

2018-09-14 16:01:59 144

原创 861. Score After Flipping Matrix的C++解法

用以下方法保证值能达到最大:1.翻转行使横着算最大:首位是1是最大的(1000比0111大),且已经是这样调整能达到的最大值。2.翻转列使横着算最大:竖着调整的是每个二进制数的相同位置,所以只要让相同位置上的1的个数最多即可。这样能够保证至少不小于行翻转完得到的最大值。class Solution {public: int matrixScore(vector<vector...

2018-09-13 15:32:23 129

原创 814. Binary Tree Pruning的C++解法

从叶子节点开始向上处理,只要是0就都剪掉。对于一棵子树,分两种情况,根节点是1的话这个节点不会消失,只要处理左右子树即可。根节点是0的话要注意如果左右子树都是0则这棵树全部剪掉,否则只剪掉不存在的。速度打败100%。class Solution {public: TreeNode* pruneTree(TreeNode* root) { if (root == NULL) retur...

2018-09-12 14:32:54 173

原创 890. Find and Replace Pattern的C++解法

使用map容器即可,但是要注意的是这个关系正反都是一一对应的,两个值都应该是key,就是ABB不能对应ccc这样的字符串。但是map只有第一个值是key,我的解决方法是存储两遍,分别作为key,检查的时候也检查两遍即可。速度打败100class Solution {public: vector<string> findAndReplacePattern(vector<s...

2018-09-11 16:11:50 146

原创 654. Maximum Binary Tree的C++解法

树的递归算法可以分为两种,一种是本过程内递归,一种是调用一个新的过程递归。我自己的方法是在原有的过程内递归:首先找到当前vector的最大值作为根节点,然后左边形成左子树、右边形成右子树。由于原有的过程固定了参数是一个vector,所以我的方法需要每次新建左子树和右子树的vector然后以此为参数进行递归:class Solution {public: TreeNode* constru...

2018-09-10 16:02:26 159

空空如也

空空如也

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

TA关注的人

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