自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 128. 最长连续序列

2020-05-301.题目描述最长连续序列2.题解在这里我使用的是map,首先将所有的数存在map中,然后从某一个数出发,看和其连续的数一共有几个,避免重复计算,我另外又用了map来标记这个数有没有访问过。3.代码class Solution {public: int longestConsecutive(vector<int>& nums) { int l=nums.size(); if (!l) return 0;

2020-05-30 11:05:13 90

原创 200. 岛屿数量

2020-05-291.题目描述岛屿数量2.题解可以进行深度优先搜索的次数就是结果。3.代码class Solution {public: int numIslands(vector<vector<char>>& grid) { int m=grid.size(); if (!m) return 0; int n=grid[0].size(); if (!n) return 0;

2020-05-29 16:59:30 103

原创 116. 填充每个节点的下一个右侧节点指针

2020-05-281.题目描述填充每个节点的下一个右侧节点指针2.题解层次遍历即可3.代码/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_va

2020-05-28 20:23:38 97

原创 108. 将有序数组转换为二叉搜索树

2020-05-281.题目描述将有序数组转换为二叉搜索树2.题解递归构建二叉树,其中当前范围内的中间的树作为当前的根节点。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL)

2020-05-28 19:39:51 101

原创 105. 从前序与中序遍历序列构造二叉树

2020-05-281.题目描述从前序与中序遍历序列构造二叉树2.题解找到前序遍历中的每个值在中序遍历中的位置。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *

2020-05-28 19:27:57 91

原创 104. 二叉树的最大深度

2020-05-281.题目描述二叉树的最大深度2.题解使用递归即可,树的深度等于其左右子树深度的最大值+1,递归结束的条件为当前根节点为空。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri

2020-05-28 15:37:59 108

原创 101. 对称二叉树

2020-05-281.题目描述对称二叉树2.题解左子树的每一层从左向右遍历,右子树的每一层从右向左遍历,看其对应的节点值是否相同即可。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right

2020-05-28 15:34:17 149

原创 371. 两整数之和

2020-05-281.题目描述两整数之和2.题解首先我们需要计算出当前位now为多少,这里我们使用^其次我们需要计算出进位carry是多少,这里我们使用&当我们求得这两个数的时候,当前的题目就转化成了now+carry,我们需要一直这么迭代直到carry为03.代码class Solution {public: int getSum(int a, int b) { while (b){ int now=a^b;

2020-05-28 14:33:52 112

原创 268. 缺失数字

2020-05-281.题目描述缺失数字2.题解nums中的数与0~n中的数合并起来只有一个数出现了一次,这个数就是我们要找的数。3.代码class Solution {public: int missingNumber(vector<int>& nums) { int l=nums.size(); if (l==0) return 0; int res=nums[0]; for (int i=1;

2020-05-28 10:28:58 109

原创 191. 位1的个数

2020-05-271.题目描述位1的个数2.题解1.直接看每个位是0还是1即可,此时的时间复杂度为数n二进制表示的位数,那有没有办法能够使其时间复杂度等于1的个数呢?2.n&(n-1)可以将n二进制表示最右边的1变成0,我们可以一直重复这个操作。3.题解class Solution {public: int hammingWeight(uint32_t n) { int cnt=0; while (n){ n=n

2020-05-27 21:41:44 84

原创 190. 颠倒二进制位

2020-05-271.题目描述颠倒二进制位2.题解如果是一个十进制整数进行反转的话,很容易想到的就是得到其每一个位的数,然后进行计算。除了用取余的方法可以知道某个数二进制表示的每个位是0/1之外,我们也可以使用位的与运算,如果一个数与1进行&操作,其结果就是最后一个二进制位是多少,比如5(101),5&1->101&001,直接可以得出最后一个二进制位为1,(n>>i)&1就表示数n二进制表示中第i个二进制位为多少。3.代码class

2020-05-27 19:50:52 113

原创 169. 多数元素

2020-05-271.题目描述多数元素2.题解1.使用map来统计每个数出现的次数3.代码class Solution {public: int majorityElement(vector<int>& nums) { int l=nums.size(); int cnt=1; int value=nums[0]; // 非空 for (int i=1;i<l;i++){

2020-05-27 19:32:50 140

原创 136. 只出现一次的数字

2020-05-271.题目描述只出现一次的数字2.题解使用异或运算即可,相同为0,不同为1,所有的结果异或的结果就是只出现一次的那个数。3.代码class Solution {public: int singleNumber(vector<int>& nums) { int l=nums.size(); int res=nums[0]; // 非空整数数组 for (int i=1;i<l;i++){

2020-05-27 16:31:28 83

原创 78. 子集

2020-05-271.题目描述子集2.题解1.递归,集合中的每个数都面临着选与不选2.使用二进制位的0/1来表示选/不选,假设集合中共有n个元素,1<<n表示一共有2^n种情况,对于每一种情况,如果其二进制位上的值为1则表示添加进来。3.代码class Solution {public: vector<vector<int>> res; vector<vector<int>> subsets(vector&l

2020-05-27 16:08:49 84

原创 75. 颜色分类

2020-05-261.题目描述颜色分类2.题解我们可以先将0放在最前面:用两个指针分别指向头l和尾h,找到从头往后不为0的数以及从尾向前的0进行交换即可。然后用相同的方法将1放在中间。3.代码class Solution {public: void sortColors(vector<int>& nums) { int n=nums.size(); int l=0,h=n-1; while (l<=h){

2020-05-26 21:38:35 156

原创 56. 合并区间

2020-05-261.题目描述合并区间2.题解对区间的左边进行排序即可3.代码class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int l=intervals.size(); vector<vector<int>> res; if (l

2020-05-26 20:36:48 78

原创 350. 两个数组的交集 II

2020-05-261.题目描述两个数组的交集 II2.题解看nums1中的元素是否出现在nums2中即可,找到了就直接break3.代码class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { int l1=nums1.size(),l2=nums2.size(); vector&

2020-05-26 10:58:59 84

原创 242. 有效的字母异位词

2020-05-261.题目描述有效的字母异位词2.题解1.对两个字符串进行排序(可以使用优先队列),看排序后的结果是否相同。2.使用map/vector统计每个单词出现的次数。class Solution {public: bool isAnagram(string s, string t) { int l1=s.length(),l2=t.length(); if (l1!=l2) return false; map<cha

2020-05-26 10:48:07 108

原创 134. 加油站

2020-05-261.题目描述加油站2.题解直接进行遍历即可,每次计算当前的油量能否行驶到下一个加油站。3.代码class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { int l=gas.size(); int i,j; for (i=0;i<l;i++){

2020-05-26 10:32:01 111

原创 55. 跳跃游戏

2020-05-261.题目描述跳跃游戏2.题解1)如果每一个位置的值都大于0,一定可以到达最后一个位置,每次只要跳一步即可。2)如果有位置的值为0,看是否一定会跳到这里即可,或者是不是一定可以跳出0即可,在这里我们遍历0出现位置(pos)前面的每一个位置(pos-),如果nums[pos-]>pos-pos-的话,就表明可以跳过这个0。class Solution {public: bool canJump(vector<int>& nums) {

2020-05-26 09:44:56 146

原创 122. 买卖股票的最佳时机 II

2020-05-261.题目描述买卖股票的最佳时机 II2.题解要想得到最高的利润,我们的买卖次数应该尽可能的多,假设我们第x天买入股票,第x+n天卖出,那么在这n天中的股票价格一定是递增的,因为如果其中有一天的股票价格小于x天的股票价格的话,我们应该选择在这一天买入股票,我们可以将这n天看作每两天都进行了买卖操作,这样只要后一天的价格比前一天高,我们就可以进行买卖操作。3.代码class Solution {public: int maxProfit(vector<i

2020-05-26 08:50:22 78

原创 378. 有序矩阵中第K小的元素

2020-05-251.题目描述 有序矩阵中第K小的元素2.题解1.优先队列2.使用二分查找class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { priority_queue<int> myque; // 优先队列 int l=matrix.size(); for (int i=0;i&lt

2020-05-25 11:31:44 91

原创 215.数组中的第K个最大元素/347. 前 K 个高频元素

2020-05-251.题目描述数组中的第K个最大元素2.题解1.使用冒泡排序2.使用快速排序3.优先队列(内部是用堆来实现的)3.代码class Solution {public: int findKthLargest(vector<int>& nums, int k) { int l=nums.size(); int i,j; for (i=0;i<k;i++){ for (

2020-05-25 09:13:26 214

原创 341. 扁平化嵌套列表迭代器

2020-05-241.题目描述扁平化嵌套列表迭代器2.题解使用递归即可3.代码/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return true if t

2020-05-24 17:15:21 106

原创 第 190 场力扣周赛

2020-05-245416. 检查单词是否为句中其他单词的前缀注意这里的前缀是指单词的开始,我们首先找到单词的开始,然后判断其长度为searchword的子串是否等于searchword即可。class Solution {public: int isPrefixOfWord(string sentence, string searchWord) { int l1=sentence.length(); int l2=searchWord.lengt

2020-05-24 15:48:22 273

原创 103. 二叉树的锯齿形层次遍历/102. 二叉树的层序遍历

2020-05-241.题目描述二叉树的锯齿形层次遍历2.题解对于层次遍历而言,就是广度优先,由于题目要求奇数层逆序,我们可以1)使用双端队列,奇偶性不同,则出入队列方式不同。2)对于偶数节点,可以将当前层所得的结果逆序。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

2020-05-24 09:19:04 161

原创 84. 柱状图中最大的矩形

2020-05-171.题目描述柱状图中最大的矩形2.题解对于某一个柱子而言,和它一样高的矩形的宽度为找到它两边最近的比它小的柱子,它们之间的距离就是当前的宽,我们需要从左到右、从右到左分别找到比当前柱子最近的最小的,在这里维护一个单调递增的的栈即可。3.代码class Solution {public: int largestRectangleArea(vector<int>& heights) { int l=heights.size();

2020-05-17 15:09:58 104

原创 面试题 17.21. 直方图的水量/42. 接雨水

2020-05-161.题目描述直方图的水量2.题解对于某一个柱体而言,它上面的水量等于它左右两边柱体最大值最小值的大小减去当前柱体的高度。3.代码class Solution {public: int trap(vector<int>& height) { int l=height.size(); if (l==0) return 0; vector<int> v1(l,0); vec

2020-05-16 19:36:43 250

原创 面试题59 - II. 队列的最大值

2020-05-151.题目描述队列的最大值2.题解这个题目有点像滑动窗口求最大值以及栈的最大值的结合体,我们可以模仿滑动窗口求最大值,开辟一个双端队列来求解最大值。3.代码class MaxQueue {public: MaxQueue() { } int max_value() { if (!myque.empty()) return mydeque.front(); return -1; }

2020-05-15 22:03:38 137

原创 150. 逆波兰表达式求值

2020-05-151.题目描述逆波兰表达式求值2.题解直接使用栈即可,需要注意的是参与运算的数的出栈的顺序。3.代码class Solution {public: int evalRPN(vector<string>& tokens) { int l=tokens.size(); if (!l) return 0; stack<int> mystack; int a,b;

2020-05-15 14:14:15 124

原创 1019. 链表中的下一个更大节点

2020-05-151.题目描述链表中的下一个更大节点2.题解我是将他转化为数组来求解下一个比它大的数3.代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vecto

2020-05-15 11:36:43 265

原创 1249. 移除无效的括号

2020-05-151.题目描述移除无效的括号2.题解什么情况下需要删除呢?如果是左括号则入栈,如果是右括号,当前栈中没有左括号就要进行删除,如果有则进行匹配,如果最后栈中还剩下左括号则进行删除。3.代码class Solution {public: string minRemoveToMakeValid(string s) { // 什么时候需要删呢? int l=s.length(); string res="";

2020-05-15 11:18:15 144

原创 1003. 检查替换后的词是否有效

2020-05-151.题目描述检查替换后的词是否有效2.题解使用栈即可,如果是 a和b直接入栈,如果是c还要判断能不能有abc,最后再判断栈是否为空即可。3.代码class Solution {public: bool isValid(string S) { int l=S.length(); if (l<3) return false; stack<char> mystack; for (int

2020-05-15 11:04:00 172

原创 946. 验证栈序列

2020-05-151.题目描述验证栈序列2.题解这个题目我本科的一位老师在给我们上算法课的时候讲过,他说关键是要明白我们什么时候需要入栈,什么时候需要出栈,题目是要返回pushed数组能不能经过一系列入栈、出栈操作得到popped数组,对于pushed数组中的元素而言,什么时候要入栈呢?如果说popped数组中的元素还没有在pushed数组中找到的话,就需要入栈一直到找到该元素为止,如果找不到,直接返回false,如果栈顶元素等于当前pusheed数组的元素值,则进行出栈操作即可,最后再

2020-05-15 10:55:01 274

原创 144. 二叉树的前序遍历

2020-05-131,题目描述 二叉树的前序遍历2.题解可以用递归或者非递归3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol

2020-05-13 16:14:44 127

原创 921. 使括号有效的最少添加

2020-05-121,题目描述使括号有效的最少添加2.题解进行括号匹配之后看栈里还剩下几个元素即可。3.代码class Solution {public: int minAddToMakeValid(string S) { int l=S.length(); stack<char> mystack; for (int i=0;i<l;i++){ if (S[i]=='(') mystack.

2020-05-12 21:02:12 284

原创 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树

2020-05-121.题目描述二叉搜索树迭代器2.题解对于二叉搜索树而言,进行中序遍历就可以得到其有序序列,我们可以先对树进行遍历,将结果保存在vector中,然后进行计算即可。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : va

2020-05-12 13:45:07 161

原创 1381. 设计一个支持增量操作的栈

2020-05-111.题目描述设计一个支持增量操作的栈2.题解使用vector在进行增量操作的时候会方便一些,vector支持push_back、pop_back、empty操作。3.代码class CustomStack {public: CustomStack(int maxSize) { maxsize=maxSize; len=0; // 初始长度为0 } void push(int x) { if

2020-05-11 20:19:51 160

原创 20. 有效的括号

2020-05-111.题目描述括号匹配问题2.题解使用栈即可,需要注意的是最后要判断栈是否为空。3.代码class Solution {public: bool isValid(string s) { int l=s.length(); stack<char>mystack; char c,t; for (int i=0;i<l;i++){ c=s[i];

2020-05-11 19:58:42 96

原创 面试题59 - I. 滑动窗口的最大值/239. 滑动窗口最大值

2020-05-111.题目描述滑动窗口的最大值2.题解使用双端队列维护一个递减的队列3.代码class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> res; int l=nums.size(); if (!l) return res; deq

2020-05-11 19:45:10 187

空空如也

空空如也

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

TA关注的人

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