- 博客(53)
- 收藏
- 关注
原创 leetcode 113. 路径总和 II
递归到叶子才将tans推进去retret.push_back(tans);class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> ret; findw(root,s...
2019-04-29 09:12:53 160
原创 leetcode 120. 三角形最小路径和 O(1)额外空间
将方块时候的最小路径改成了三角将triangle直接改成dp数组不用开额外空间triangle[i][j] += min(triangle[i-1][j],triangle[i-1][j-1]); 每一行去掉首位位置首位和尾位就一条路径triangle[i][0] += triangle[i-1][0];triangle[i][triangle[i].size()-1] += triang...
2019-04-29 08:57:35 412
原创 例会笔记(5) 位运算&STL
位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。 (Wikipedia)分类&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^...
2019-04-25 09:35:38 400
原创 leetcode 124. 二叉树中的最大路径和
递归用一个全局的 maxret 记录最后的返回值,不断跟新最大值计算每一个结点向下延伸的最大和路径,作为递归的返回值由于每次计算该节点的时候需要计算左子树和右子树的最大,所以就可以直接计算该点连接左右子数的最大路径和,然后去更新maxret递归从叶子开始往上构造,类似求最大子序列的和,当前叶子的孩子的和如果是个负数就丢弃掉,重新计算和,如果大于零就加上之后返回class Solution...
2019-04-23 20:12:45 295 2
原创 leetcode 442. 数组中重复的数据
巧妙的不开其他空间用当前数的数值-1的位置的数的正负来记录出现的次数nums[ abs(nums[i])-1 ] = -nums[ abs(nums[i])-1 ]class Solution {public: vector<int> findDuplicates(vector<int>& nums) { vector<int&...
2019-04-22 10:02:47 147
原创 leetcode 96. 不同的二叉搜索树
递归n个结点轮流做根节点,然后左右进行递归,两个结果做乘法发现20个就超int,打表只需要到19#include <iostream>#include <vector>using namespace std;class Solution {public: int numTrees(int n) { if(n==0){ ...
2019-04-21 20:27:27 174
原创 leetcode 2. 两数相加
递归四种情况l1 && l2只有 l1 不空只有 l2 不空都没有 递归结束同时要分别考虑进位这样就是八种情况class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { return add(l1,l2,0); } ListNod...
2019-04-20 17:58:48 200
原创 leetcode 371. 两整数之和 机组二进制加法
https://leetcode-cn.com/problems/sum-of-two-integers/comments/两数直接异或是无进位的加法器 得到A两数直接做与操作是得到各个位的进位B将A与B的二倍(左移一位 因为进位是要和前一位相加)再进行这样操作,直到进位为0class Solution {public: int getSum(int a, int b) { ...
2019-04-20 17:15:31 306
原创 leetcode 155. 最小栈 单调栈
一个正常的栈,一个最小栈栈顶是当前栈的最小元素push的时候 如果push的x比最小栈顶的小就push x 否则吧栈顶再push一遍#include <iostream>#include <stack>using namespace std;class MinStack {public: /** initialize your data structu...
2019-04-18 21:04:29 327 1
原创 leetcode 357. 计算各个位数不同的数字个数
排列组合之后打表以3位数为例所有的减去以0开头的A103−A92A_{10}^{3}-A_{9}^{2}A103−A92#include <iostream>#include <map>#include <math.h>#include <vector>using namespace std;#define debug(x) ...
2019-04-18 20:18:10 311
原创 leetcode 372. 超级次方 欧拉降幂
快速幂超时 因为要转二进制typedef long long LL;class Solution {public: vector<int> chu2(vector<int>& b){ int jie = 0; for(int i=0;i<b.size();i++){ int curr =...
2019-04-18 09:39:01 605
转载 C++ stl 容器 复杂度
https://www.cnblogs.com/LloydDracarys/articles/8872804.htmlmap, set, multimap, and multiset上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:插入: O(logN)查看:O(logN)删除:O(logN)hash_map, hash_set, hash_multi...
2019-04-17 21:31:32 507
原创 leetcode 137. 只出现一次的数字 II 位运算 【状态转移:真值表转逻辑表达式】
对每一位单独统计出现1的次数, 如果出现的次数不能整除3说明唯一存在的数在这一位上为1, 时间复杂度O(32N)#include <iostream>#include <vector>using namespace std;class Solution {public: int singleNumber(vector<int>& num...
2019-04-17 21:03:08 307
原创 leetcode 381. O(1) 时间插入、删除和获取随机元素 - 允许重复 map
用一个map记录每一个元素出现的次数就可以然后弄一个int记录总时间这样 插入和删除的时候就将对应数字的mp值改掉就可以但是获取随机元素就不是O(1)了 但是小于O(n)class RandomizedCollection {public: map<int ,int >mp; int cnt; /** Initialize your data stru...
2019-04-17 19:38:27 387
原创 leetcode 300. 最长上升子序列
可以不连续严格单调dpdp[i] 表示 以nums[i] 结尾的最长上升子序列转移用i前面的dp更新当前的dpfor(int i=1;i<nums.size();i++){ for(int j=i-1;j>=0;j--){ if(nums[i] > nums[j]){ dp[i] = max(dp[i],dp[j]+1); ...
2019-04-17 10:08:22 160
原创 Dijkstra算法大连理工大学数据结构上机第四章
//Dijkstra算法#include <iostream>#include <queue>using namespace std;template<class EdgeType>class Edge{public: int start,end;//边的起始节点,终止节点 EdgeType weight;//边的权重(应...
2019-04-17 08:01:27 41703
原创 Dijkstra算法大连理工大学数据结构上机第四章
#include <iostream> #include <queue>using namespace std; template<class EdgeType>class Edge{public: int start,end;//边的起始节点,终止节点 EdgeType weight;//边的权重(应该可以定义为int) ...
2019-04-16 19:07:07 491
原创 leetcode 84. 柱状图中最大的矩形 单调栈O(N)
就是找以当前位置为最小值的最大延展区间暴力O(n^3)超时 大多数的样例是过了的class Solution {public: int largestRectangleArea(vector<int>& heights) { int ret = 0; for(int i=0;i<heights.size();i++){ ...
2019-04-16 19:05:56 471
原创 leetcode 72. 编辑距离 dp
状态转移dp[i][j] 表示长为i的word1 变为长为j的word2的最小次数if( word1[i-1]== word2[j-1] ){ dp[i][j] = dp[i-1][j-1];}else{ dp[i][j] = min( dp[i-1][j]+1 , min( 1+dp[i][j-1],1+dp[i-1][j-1]) );}代码class Solution {...
2019-04-16 18:42:27 212
原创 leetcode 240. 搜索二维矩阵 II
#include <iostream>#include <vector>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;//O(n^2)/*class Solution {public: bool searchMatrix(ve...
2019-04-16 18:15:14 110
原创 leetcode 91. 解码方法 dp
递归超时改用dp#include <iostream>#include <string>#include <map>#include <vector>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;//递归超时/...
2019-04-16 10:09:57 247
原创 leetcode 78. 子集
遍历数组结果从空集开始,向已知的集合加入当前元素,将一个自己加到结果里面到最后一个元素是即为结果#include <iostream>#include <vector>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;class Soluti...
2019-04-15 21:54:56 179
原创 leetcode 90. 子集 II
#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: vector<vector<int>> subsetsWithDup(vector<int>& nu...
2019-04-15 21:52:15 100
原创 leetcode 73. 矩阵置零 O(2)空间
只用两个bool变量记录0行 0列是否需要置0然后用该矩阵的0行0列 记录对应行对应列是否需要置0#include <iostream>#include <vector>#include <limits.h>using namespace std;#define debug(x) cout<<#x<<": "<<...
2019-04-15 16:46:01 204
原创 DUTOJ 1282: Zeratul与a+b=c bitset 小内存数组
问题1282--Zeratul与a+b=c1282: Zeratul与a+b=c时间限制: 1 Sec 内存限制: 32 MB提交: 148 解决: 25[提交] [状态] [讨论版] [命题人:Zeratul]题目描述判断一个数列中是否有两个数加起来等于cc,含义见Description。输出如果数列中存在两个数加起来等于c,输出YE...
2019-04-14 21:55:29 377
原创 leetcode 295. 数据流的中位数 堆排序
插入后排序就会超时需要用复杂度更小的堆来实现 插入只需O(1)将数据分为两堆,一堆的数据都比另一堆的大从元素都大的堆里面找到最小的元素,从元素都小的堆里面找到最大的二者的均值就是中位数当然这个是元素总个数是偶数个如果是奇数个那就是元素多的堆的堆顶构建的过程让两个堆的数量差值不超过1#include <iostream>#include <vector>#...
2019-04-11 16:35:03 296
原创 DUTOJ 1165: A Hard Game
寻找必败态 也叫奇异态没有找到通项公式 只能递推打表 用map快一点递推:从a[0]=3开始a[n+1]={a[n−1]/3∗2+1a[n−1]是偶数a[n−1]/3∗2+2a[n−1]是奇数a[n+1]=\left\{\begin{aligned} a[n-1]/3*2+1 & & {a[n-1]是偶数}\\a[n-1]/3*2+2 &am...
2019-04-11 09:29:12 293
原创 DUTOJ 1287: 昨日头条上的Zeratul
学校的oj前端改版。好评矩阵快速幂 先写好举证乘法 在数值快速的地方替换成矩阵乘法即可用int会超范围 改用long longcodeblocks我先在矩阵的结构体里面重载了 * 号 之后报错internal compiler error: Segmentation fault把乘法写在结构体外面就好了很迷#include <iostream>#include &l...
2019-04-10 09:36:27 296
原创 leetcode 79. 单词搜索
递归深搜#include <iostream>#include <vector>#include <string>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;class Solution {public: boo...
2019-04-09 19:34:07 110
原创 leetcode 868. 二进制间距
(N&1) ==0位运算的优先级好低 & 低于== 需要加括号#include <iostream>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;class Solution {public: int binaryGap(...
2019-04-09 14:53:14 246
原创 leetcode 187. 重复的DNA序列
题目有问题应该是超过偷懒 使用mapclass Solution {public: vector<string> findRepeatedDnaSequences(string s) { vector<string>ret; if(s.size()<=10){ return ret; ...
2019-04-09 14:19:43 380
原创 leetcode 874. 模拟行走机器人
模拟构造一个point#include <iostream>#include <vector>#include <map>#include <set>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;struct ...
2019-04-09 09:41:28 310
原创 leetcode 1005. K 次取反后最大化的数组和
思路简单 主要纪念一下内存首次击败100% 之前都是0 ^.^先把负数变成正数然后还有K的话就祸祸最小的 注意对2取余#include <iostream>#include <vector>#include <string>#include <algorithm>#include <limits.h>using names...
2019-04-08 19:06:02 229
原创 leetcode 94. 二叉树的中序遍历
递归class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int>ret; inorder(root,ret); return ret; } void inorder(TreeNode* root,...
2019-04-07 17:17:47 188
原创 leetcode 60. 第k个排列 康托展开
库函数 algorithm里面的next_permutation效率不高#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;class Solution {public: string ge...
2019-04-07 17:14:05 198
原创 leetcode 28. 实现strStr()
库函数#include <iostream>#include <string>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;class Solution {public: int strStr(string haystack, s...
2019-04-07 14:19:32 151
原创 leetcode 49. 字母异位词分组
若没有重复字母的时候可以这样 用一个int来存储字符串中含有的字符 然后将该int 映射到一个vector 上 c++ map 真好用!与leetcode 318. 最大单词长度乘积https://blog.csdn.net/L1558198727/article/details/88902567用法相同可惜这个题目单词中有重复的字母#include <bits/stdc++.h...
2019-04-06 21:53:52 176
原创 leetcode 15 18. 三数之和&四数之和
先排序若头大于0 和尾巴小于0 直接返回没有变量 i 依次拿出数组的元素,j , k往后弄两个指针找和是第一个相反数的j k后面的元素找到之后 前后移动指针 若发现和移动前的位置元素相等 则直接跳过对于i该趟循环结束之后才可以while(i<nums.size()-1 && nums[i]==nums[i+1]){ i++; }跳过元素注意每次while...
2019-04-06 20:23:47 194
原创 leetcode 61. 旋转链表
把链表变成一个环#include <iostream>using namespace std;#define debug(x) cout<<#x<<": "<<x<<endl;struct ListNode { int val; ListNode *next; ListNode(int x) : val(...
2019-04-06 19:27:18 137
原创 leetcode 50. Pow(x, n) 快速幂
好像没怎么快#include <iostream>#include <math.h>using namespace std;class Solution {public: double myPow(double x, int n) { double ans =1.0; long long nn = (long long)n...
2019-04-05 23:13:58 190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人