![](https://img-blog.csdnimg.cn/20200314122503492.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Leetcode
文章平均质量分 89
leetcode
UnendingGlory
路有尽,命有时,生当燎原向天问
展开
-
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 · 184 阅读 · 0 评论 -
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 · 153 阅读 · 0 评论 -
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 · 229 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
1111 有效括号的嵌套深度
用栈来计算深度,但是此题中输入已经保证了括号一定是匹配的,所以不需要真的用栈直观解法1:每次操作使得A集合和B集合的深度相差最小class Solution {public: // 使得两组字符串的深度相差最小 vector<int> maxDepthAfterSplit(string seq) { vector<int> ans; ...原创 2020-04-01 11:29:53 · 105 阅读 · 0 评论 -
面试题 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 阅读 · 0 评论 -
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 · 121 阅读 · 0 评论 -
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 · 93 阅读 · 0 评论 -
315 计算右侧小于当前元素的个数
使用计数法,维护一个cnt计数数组,从右往左遍历原数组对于nums中的每个元素i,出现一次,则++cnt[i]由于要求右边比其小的元素个数,所以即求cnt[i - 1] + cnt[i - 2] + …这两个问题刚好对应 307题 的 update 和 sumRange操作,可以用树状数组解决(代码中不需要存cnt数组)与307题不同的是,此题需要将nums中的元素作为树状数组的下标,由于...原创 2020-03-23 09:05:02 · 205 阅读 · 0 评论 -
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 · 94 阅读 · 0 评论 -
212 单词搜索II
思路:先将单词插入到前缀树中,然后再DFS一步步去判断下一个要遍历的字符是否存在前缀树中,若存在,则加入中间变量中,若当前遍历的字符序列在字典树中组成一个单词,则加入ans中不存在,则停止该方向的搜索,因为前缀不存在,则后面DFS生成的单词均以此为前缀,均不存在在DFS时使用一个set来保存存在于前缀树中的单词,因为遍历时可能会有重复的单词加入,注意DFS时对于vis数组和中间变量的重置。...原创 2020-03-20 17:37:00 · 128 阅读 · 0 评论 -
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 · 100 阅读 · 0 评论 -
面试题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 · 70 阅读 · 0 评论 -
208 实现Trie前缀树
字典树,用于统计,排序和保存大量的字符串,利用字符串的公共前缀来减少查询时间,查询效率比哈希树高。示例:联想此图,很容易写出插入,查找,查找是否存在前缀等函数class Trie { bool is_end; // 当前是否是一个单词的结尾 Trie *next[26]; // 该节点往下public: /** Initialize your data struc...原创 2020-03-20 10:29:07 · 103 阅读 · 0 评论 -
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 · 87 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 146 阅读 · 0 评论 -
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 · 136 阅读 · 0 评论 -
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 · 100 阅读 · 0 评论 -
1361 验证二叉树
只根据入度判断是典型的错误算法(完美踩坑!!气死了),有向图中可能存在环或者非联通正确思路:先用DFS / BFS / 并查集判断是否是联通图再通过边数和入度来判断即可,满足边数 = n - 1的连通图一定不存在环,一定是树class Solution {public: void DFS(int x, vector<int>& leftChild, vec...原创 2020-03-18 23:17:34 · 181 阅读 · 0 评论 -
1202 字符串中的元素
思路:采用并查集,在输入pairs的时候合并,分为不同的集合开一个二维的vector,用来存储每一个类的字符,并排序之最后遍历一遍原字符,在其father的vector中一次拿一个字符class Solution { vector<int> father;public: int findFather(int x) { int a =...原创 2020-03-18 21:12:12 · 297 阅读 · 0 评论 -
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 · 137 阅读 · 0 评论 -
面试题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 · 136 阅读 · 0 评论 -
面试题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 阅读 · 0 评论 -
面试题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 · 84 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
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 · 155 阅读 · 0 评论 -
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 · 189 阅读 · 0 评论 -
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 · 126 阅读 · 0 评论 -
面试题 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 · 108 阅读 · 0 评论 -
1029 两地调度
思路:先不考虑两个城市去的人数,优先选小的然后考虑城市人数均分,将人数多的城市均给另一个城市如何选择?容易想到,为了保证总体值最小,选择的应该是cost的差值小的输入时用小顶堆来维护即可class Solution {public: int twoCitySchedCost(vector<vector<int>>& costs) { ...原创 2020-03-16 10:30:17 · 74 阅读 · 0 评论 -
874 模拟行走机器人
依题意,显然应该一步步模拟之其中难解决的两个问题:如何判断面对的是障碍点?当然可以定义一个很大的二维数组,然后将障碍点记为1,但那样极其浪费内存我们可以定义一个类型为pair的set,一开始将障碍点的坐标insert进set中,每走一步,判断面对的点是不是障碍点,若不是障碍点,则继续往前走,若是障碍点,则停下,等待转弯我这里选择了unordered_set,需要注意自己重写一个哈希类...原创 2020-03-15 18:13:31 · 135 阅读 · 0 评论 -
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 · 90 阅读 · 0 评论 -
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 · 115 阅读 · 0 评论 -
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 · 120 阅读 · 0 评论