自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

UnendingGlory

Do strive, do not complain.

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

原创 641 设计循环双端队列

双向循环链表模拟deque#include <bits/stdc++.h>// 双向循环链表模拟struct node{ int val; struct node *pre, *next; node(int _val){val = _val;};};class MyCircularDeque { int size, cur_size; ...

2020-04-05 23:01:10 179

原创 46 全排列

经典解法,递归 + 标记访问数组// 经典解法class Solution { int n; unordered_map<int, bool> vis; vector<int> p; vector<vector<int>> ans;public: // 递归生成,分解成子问题 void gene...

2020-04-05 21:56:34 151

原创 8 字符串转整数aoti

注意"+42"返回值是42// 注意"+42"返回值是42class Solution {public: int myAtoi(string str) { long long ans = 0; int i = 0, sign = 1; // 先清空字符串前缀空格 while(str[i] == ' ') ++i; ...

2020-04-03 12:13:07 225

原创 289 生命游戏

简单题,开两个二维数组或使用复合状态class Solution {public: // -1之前是活细胞现在是死细胞,0死细胞,1活细胞,2之前是死细胞现在是活细胞 void gameOfLife(vector<vector<int>>& board) { int dx[8] = {1, 0, -1, 0, 1, -1, 1, ...

2020-04-02 12:39:11 123

原创 1111 有效括号的嵌套深度

用栈来计算深度,但是此题中输入已经保证了括号一定是匹配的,所以不需要真的用栈直观解法1:每次操作使得A集合和B集合的深度相差最小class Solution {public: // 使得两组字符串的深度相差最小 vector<int> maxDepthAfterSplit(string seq) { vector<int> ans; ...

2020-04-01 11:29:53 104

原创 面试题 17.12 BiNode

思路:中序遍历并修改指针递归版本class Solution { TreeNode* pre;public: // 递归遍历处理,中序遍历的同时将pre的右指针指向自己即可 void inOrder(TreeNode *root) // pre的值要传给上一层,所以用引用或者全局 { if(root == nullptr) return; ...

2020-03-31 14:48:39 230

原创 1382 将二叉搜索树变平衡

先中序遍历得到序列,再二分建树,必定是平衡二叉树class Solution { vector<int> in;public: void inOrder(TreeNode* root) { if(root == nullptr) return; inOrder(root->left); in.push_...

2020-03-29 18:55:46 117

原创 820 单词的压缩编码

灵活使用字典树数据结构。即寻找所有不是其他单词后缀的单词使用前缀树,先将单词倒转,然后建树,最后遍历之即可// 节点class Trie{ bool is_end; string word; Trie *next[26];public: Trie() { is_end = false; for(int i = 0...

2020-03-28 14:12:23 92

原创 315 计算右侧小于当前元素的个数

使用计数法,维护一个cnt计数数组,从右往左遍历原数组对于nums中的每个元素i,出现一次,则++cnt[i]由于要求右边比其小的元素个数,所以即求cnt[i - 1] + cnt[i - 2] + …这两个问题刚好对应 307题 的 update 和 sumRange操作,可以用树状数组解决(代码中不需要存cnt数组)与307题不同的是,此题需要将nums中的元素作为树状数组的下标,由于...

2020-03-23 09:05:02 202

原创 307 区域和检索

四种方法。方法1:直接暴力,sumRange o(n),update为o(1),如果k次操作均是求和,则时间复杂度为o(kn),难以承受class NumArray { vector<int> v;public: NumArray(vector<int>& nums) { for(int i :nums) v.push_bac...

2020-03-21 19:14:31 89

原创 212 单词搜索II

思路:先将单词插入到前缀树中,然后再DFS一步步去判断下一个要遍历的字符是否存在前缀树中,若存在,则加入中间变量中,若当前遍历的字符序列在字典树中组成一个单词,则加入ans中不存在,则停止该方向的搜索,因为前缀不存在,则后面DFS生成的单词均以此为前缀,均不存在在DFS时使用一个set来保存存在于前缀树中的单词,因为遍历时可能会有重复的单词加入,注意DFS时对于vis数组和中间变量的重置。...

2020-03-20 17:37:00 126

原创 211 添加与搜索单词

思路:前缀树,注意输入正则字符串的时候对’ . '的处理。class Trie{public: bool is_end; Trie *next[26]; Trie() { is_end = false; for(int i = 0; i < 26; ++i) next[i] = nullptr; } vo...

2020-03-20 15:17:35 99

原创 面试题40 最小的k个数

与 703 数据流中第k个大元素思路类似https://blog.csdn.net/include_not_found_/article/details/104858263class Solution { // 堆排序,维护一个大顶堆public: vector<int> getLeastNumbers(vector<int>& arr, ...

2020-03-20 11:01:50 69

原创 208 实现Trie前缀树

字典树,用于统计,排序和保存大量的字符串,利用字符串的公共前缀来减少查询时间,查询效率比哈希树高。示例:联想此图,很容易写出插入,查找,查找是否存在前缀等函数class Trie { bool is_end; // 当前是否是一个单词的结尾 Trie *next[26]; // 该节点往下public: /** Initialize your data struc...

2020-03-20 10:29:07 92

原创 207 课程表

简单的队列 + 拓扑排序class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { int c[numCourses], cnt = 0; vector<vector<int>&g...

2020-03-19 21:13:01 85

原创 232 用栈实现队列

栈模拟队列,入队时利用辅助栈将入队元素放在栈底class MyQueue { stack<int> s1;public: /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ ...

2020-03-19 20:34:12 70

原创 1042 不邻接植花

一开始理解错题意。。写了个并查集没过只是简单的考察图的数据结构==class Solution {public: vector<int> gardenNoAdj(int N, vector<vector<int>>& paths) { vector<vector<int>> g(N + 1); ...

2020-03-19 17:41:10 144

原创 997 找到小镇法官

目标点入度 == N - 1,出度 = 0class Solution {public: int findJudge(int N, vector<vector<int>>& trust) { int indegree[N + 1], outdegree[N + 1]; memset(indegree, 0, sizeof(...

2020-03-19 16:37:58 127

原创 409 最长回文串

思路:偶数次数的字符才能完美对称奇数次数的要么没有,有则去除对子后必然只剩一个在中间统计奇数次数的字符个数即可class Solution {public: int longestPalindrome(string s) { int cnt[26][2]; // 0: Upper , 1: lower memset(cnt, 0, sizeof...

2020-03-19 11:32:39 99

原创 1361 验证二叉树

只根据入度判断是典型的错误算法(完美踩坑!!气死了),有向图中可能存在环或者非联通正确思路:先用DFS / BFS / 并查集判断是否是联通图再通过边数和入度来判断即可,满足边数 = n - 1的连通图一定不存在环,一定是树class Solution {public: void DFS(int x, vector<int>& leftChild, vec...

2020-03-18 23:17:34 180

原创 1202 字符串中的元素

思路:采用并查集,在输入pairs的时候合并,分为不同的集合开一个二维的vector,用来存储每一个类的字符,并排序之最后遍历一遍原字符,在其father的vector中一次拿一个字符class Solution { vector<int> father;public: int findFather(int x) { int a =...

2020-03-18 21:12:12 295

原创 130 被包围的区域

思路:依题意,被围的区间’O’不会位于边界上,那么我们设立一个标记数组protect,从边界开始BFS或者DFS,与边界上的’O’相连的内部’O’都protect起来。之后,再去遍历矩阵内部,未被保护的’O’均修改成’X’即可.注意输入为空时的处理。class Solution { int row, col; int dx[4] = {0, 1, 0, -1}, dy[4]...

2020-03-17 20:30:24 136

原创 面试题55 平衡二叉树

后序遍历即可class Solution { bool flag = true;public: int getHeight(TreeNode* root) { if(!root) return 0; int l_h = getHeight(root->left), r_h = getHeight(root->right); /...

2020-03-17 13:23:55 133

原创 面试题15 二进制中1的个数

与面试题39类似,位运算class Solution {public: int hammingWeight(uint32_t n) { int ans = 0; while(n) { if(n & 1) ++ans; n >>= 1; } ...

2020-03-17 12:25:57 138

原创 面试题39 数组中出现次数超过一半的数字

class Solution {public: int majorityElement(vector<int>& nums) { unordered_map<int, int> m; // 不知道数的范围用map int x = nums.size() >> 1; // 除2,提前计算好减少耗时 ...

2020-03-17 12:14:08 83

原创 1356 根据数字二进制下1的数目排序

直接除基取余法暴力class Solution { int m[10005];public: vector<int> sortByBits(vector<int>& arr) { memset(m, 0, sizeof(m)); for(int i : arr) { int ...

2020-03-17 11:57:45 261

原创 1160 拼写单词

仔细读题,每次拼写某个单词时时,chars中的每个字母只能用一次多个单词的拼写其实是在重复使用charsclass Solution {public: int countCharacters(vector<string>& words, string chars) { int *p = new int[26]; memset(p, ...

2020-03-17 10:24:47 152

原创 242 有效的字母异位词

class Solution {public: bool isAnagram(string s, string t) { unordered_map<char, int> S, T; for(auto i : s) ++S[i]; for(auto i : t) ++T[i]; return S == T ? t...

2020-03-16 12:29:58 185

原创 1221 分割平衡字符串

输入字符串中L和R数目已经相同题目未要求求各平衡字符串,若要求出各平衡字符串则应用双指针遍历或者栈class Solution {public: int balancedStringSplit(string s) { int ans = 0, cnt = 0; for(int i = 0; i < s.size(); ++i) {...

2020-03-16 12:14:52 125

原创 面试题 01.06 字符串压缩

简单题,注意边界情况处理即可。class Solution {public: string compressString(string S) { string ans; char pre = S[0]; int cnt = 0; for(int i = 0; i < S.size(); i++) {...

2020-03-16 11:11:25 104

原创 1029 两地调度

思路:先不考虑两个城市去的人数,优先选小的然后考虑城市人数均分,将人数多的城市均给另一个城市如何选择?容易想到,为了保证总体值最小,选择的应该是cost的差值小的输入时用小顶堆来维护即可class Solution {public: int twoCitySchedCost(vector<vector<int>>& costs) { ...

2020-03-16 10:30:17 74

原创 874 模拟行走机器人

依题意,显然应该一步步模拟之其中难解决的两个问题:如何判断面对的是障碍点?当然可以定义一个很大的二维数组,然后将障碍点记为1,但那样极其浪费内存我们可以定义一个类型为pair的set,一开始将障碍点的坐标insert进set中,每走一步,判断面对的点是不是障碍点,若不是障碍点,则继续往前走,若是障碍点,则停下,等待转弯我这里选择了unordered_set,需要注意自己重写一个哈希类...

2020-03-15 18:13:31 132

原创 set和map对象为自定义类型时需注意的问题

set和map不可以对自定义的数据类型自动排序,但是可以对pair自动排序,默认优先按照first排序,first相等则按照second排序pair对象set:#include <bits/stdc++.h>using namespace std;int main(){ set<pair<int, int>> s; s.insert(...

2020-03-15 17:53:36 305

原创 695 岛屿的最大面积

方法一:BFSclass Solution {public: int maxAreaOfIsland(vector<vector<int>>& grid) { int row = grid.size(), col = grid[0].size(); int dx[4] = {1, 0, -1, 0}, dy[4] = {0...

2020-03-15 15:37:13 88

原创 1046 最后一块石头的重量

水题,思路很直观。class Solution {public: int lastStoneWeight(vector<int>& stones) { priority_queue<int, vector<int>> pq; // 默认大顶堆 for(auto i : stones) pq.push(i); ...

2020-03-14 16:25:27 112

原创 使用前置运算符和后置运算符的一些tips

在C++原生语言中,前置运算符返回的是对象的引用,后置运算符不返回引用,为了维持这种一致性,在重载前置运算符时返回值最好也是引用因此,前置可以作为左值,而后置不可++a = 1合法, a++ = 1不合法由于前置返回的是引用,所以前置运算符较后置运算符快。(没有一些中间比对象的构造和析构的过程),所以若前置和后置对程序正确性没有影响的情况下应该使用前置运算符。...

2020-03-14 12:56:41 272

原创 703 数据流中第k大元素

// 方法一,第一遍, 56ms,有很多很迷的垃圾操作class KthLargest { int K; vector<int> heap;public: KthLargest(int k, vector<int>& nums) { //heap.resize(k + 1); K = k; // 赋值给私有...

2020-03-14 12:40:16 119

原创 CP分解和HOSVD分解

一、CP分解(CANDECAMP/PARAFAC) 这是较为古老的一种张量分解方法。最早的研究历史可以追溯到1927年。在上一节,学习向量乘积的时候,我们看到两个向量外积产生一个矩阵。我们可以推断出,三个向量做外积得出一个三维张量(其实是一种extension)。 数学上,我们可以用以下公式表示: 我们可以将三个向量的外积结果以张量的三种矩阵化形式写出: matlab实例程序如...

2018-08-07 17:58:16 10562 6

原创 使用pylint来规范代码格式

Pylint是用来规范代码格式的工具。安装以及pycharm中配置:https://blog.csdn.net/python_tty/article/details/52230179写完代码后可以运行pylint来检验自己的代码质量,10分为满分。然鹅,刚开始用的时候评分都是负数  ̄へ ̄。。。个人采用pylint的默认配置,配置可以修改(如缩进的空格数等等)。 规范如下:1、模块...

2018-08-02 16:51:13 3393

原创 向量、矩阵、张量基础知识

前言 学习并且做这篇笔记目的:学习张量,初步了解张量分解(tensor decomposition)领域。那么什么是张量分解呢?研究它具体的应用是什么? 为了便于理解,我们先从矩阵分解讲起。 我们知道现在的数据大部分都是以矩阵形式存储的。然而在收集数据或者处理数据时总会有矩阵元素丢失的情况。这个时候矩阵分解就可以派上用场了。矩阵分解的另一个例子是根据矩阵中已有数据值去预测未知位置的值。比方说...

2018-07-31 19:05:43 21601 12

空空如也

空空如也

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

TA关注的人

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