自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode29. 两数相除

目录题目来源解题方法递归位运算题目来源解题方法递归直接举例吧:11/3因为11>3,所以解至少为1,接着我们让3翻倍为6,11>6,说明解至少为2,接着让6翻倍,11<12,所以我们应该考虑11-6的值与3再进行比较,即5>3,说明解至少为3,5<6我们该考虑5-3的值2,2<3,结束,答案为3我们可以用long先存下,接着全部转为正数,最后带上符号class Solution {public: int divide(int dividend,

2020-06-16 15:42:39 161

原创 leetcode105. 从前序与中序遍历序列构造二叉树(dfs)

目录题目来源解题方法DFS题目来源解题方法DFS/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { unordered_

2020-06-15 17:32:33 123

原创 leetcode122. 买卖股票的最佳时机 II(贪心+dp)

目录题目来源解题方法贪心动态规划题目来源解题方法贪心贪心的实质就是只关心当下的利益不关心长远利益,我们只要遇到今天比昨天价格高,就在昨天买入,今天卖出class Solution {public: int maxProfit(vector<int>& prices) { int res=0; int n=prices.size(); for(int i=1;i<n;i++){ res+=m

2020-06-12 17:14:33 135

原创 leetcode55. 跳跃游戏(贪心)

目录题目来源解题方法贪心题目来源解题方法贪心对于每个位置,我们只需要维护当前位置到达的最大位置,若其能达到最后一个位置,return true,若遍历完所有位置皆无法到达,则return false举例:【2,3,1,1,4】维护一个变量rightmost记录最大可到达的位置,初始为0i=0时,最大可以达到2;i=1<2,最大可到达1+3=4,rightmost更新为4;return true举例:【3,2,1,0,4】i=0时,最大可到达3;i=1<3,最大可到达1+2=3

2020-06-12 15:27:53 106

原创 leetcode12. 整数转罗马数字(贪心哈希+暴力)

目录题目来源解题方法贪心哈希暴力按位题目来源解题方法贪心哈希class Solution {public: string intToRoman(int num) { int value[]={1000,900,500,400,100,90,50,40,10,9,5,4,1}; string roman[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; string

2020-06-12 15:06:12 106

原创 leetcode15. 三数之和(排序+双指针)

目录题目来源解题方法排序+双指针题目来源解题方法排序+双指针三个变量i,j,k分别表示三个数的下标题目要求需要无重复的答案,我们就可以考虑先排序,因为排序后的数组后一个总是大于等于当前元素,如果相等的话我们就继续往后一个即可双指针思路的来源:我们可以发现在确定第一个数的情况下,第二个数的大小与第三个数是成反比的,如果三数之和大于0,说明第三个数大了,那就可以让第三个数变小,即k- -,如果三数之和等于0,就存入res我们选择在第一个数更新的时候更新k,原因是第二个数更新的时候,只会越变越大

2020-06-12 14:18:22 113

原创 leetcode6. Z 字形变换

目录题目来源解题方法电梯法逐行访问题目来源解题方法电梯法从上到下,从下到上进行字符串的填充,我们可以用一个变量curRow来表示当前行,用一个变量goDown来表示是否往下走,当curRow为0或者numRows-1的时候,说明应该改变方向了,那么就将goDown取非,curRow改变为相对应的行class Solution {public: string convert(string s, int numRows) { if(numRows == 1)

2020-06-11 14:16:44 89

原创 leetcode120. 三角形最小路径和

目录题目来源解题方法题目来源解题方法都知道的dp,但是对这题而言,从下到上是非常简单的,直接上代码,思路就很清晰了class Solution {public: int minimumTotal(vector<vector<int>>& t) { for(int i=t.size()-2; i>=0; i--) for(int j=0;j<t[i].size();j++){

2020-06-10 18:19:55 73

原创 leetcode最长回文子串

目录题目来源解题方法动态规划中心展开法题目来源解题方法动态规划dp[i,j]其中i,j表示子串的首尾,一个长度的子串一定是回文的,两个长度的且相等字母的子串也一定是回问的,于是dp[i][i]=1,dp[i][i+1]=1class Solution {public: string longestPalindrome(string s) { int n = s.size(); if(n==0 || n==1) return s;

2020-06-09 22:18:51 84

原创 leetcode面试题56 - II. 数组中数字出现的次数 II

目录题目来源解题方法哈希表位运算收获题目来源解题方法哈希表比较简单,不做阐述位运算关键点:将每个数的同一位进行相加,若结果能被3整除,说明此时答案数的这一位为0,因为如果没有答案数的干扰,每个数都是3个,那他们这一位的和不是0就是3的倍数,所以一定能被3整除,如果有了答案数的干扰,说明答案数这一位为1,这一位一定会比3的倍数多1class Solution {public: int singleNumber(vector<int>& nums) {

2020-06-09 17:05:24 131

原创 leetcode面试题49. 丑数

目录题目来源解题方法动态规划题目来源解题方法动态规划关键点:一个数若是丑数,则其2或者3或者*5以后也是丑数掌握了关键点以后,我们就可以设置dp[0]为1,那么分别有在1基础上一直2,一直3,一直5这样的三个序列,那么这题就可以改为合并3个有序数组,所以我们设置p1,p2,p3这样的三个指针,每次选取最小的那个成为dp[i],并移动指针,之所以设置3个if是为了去除相同元素,比如23和3*2都能得到6,但是我们只需要一个,所以我们就使用3个if,将碰到6的数组的指针都向前移动class Sol

2020-06-09 15:46:32 89

原创 leetcode面试题46. 把数字翻译成字符串

目录题目来源解题方法题目来源解题方法首先我们要知道目标数字是几位数,1-9共9个数,10-99共90个数且一个数占2位,100-999共900个数且一个数占3位举例:532532-9-90*2=343 < 900 * 3,所以我们可以知道这是三位数里面的第343位,那么每3个是一组,所以343/3=114余1,即100+114=214里面的第1个数2class Solution {public: int findNthDigit(int n) { long ba

2020-06-09 15:28:47 141

原创 leetcode面试题43. 1~n整数中1出现的次数

目录题目来源解题方法题目来源解题方法我们可以按照从低位向高位的顺序来解记high为高位,cur为当前位,low为低位直接举例:5014首先我们先看个位,此时high=501,cur=4,low=0,那么对于这种情况,高位从0-500的变化过程中,个位都会有一个1,所以有501*1个1,接着当前位是4且该位为个位,因此只会有1个1,所以个位有501+1=502个1接着我们看十位,此时high=50,cur=1,low=4,对于这种情况,高位从0-49的变化过程中,十位都会有1个1,也就是说每次

2020-06-09 11:45:21 159

原创 leetcode面试题68 - I. 二叉搜索树的最近公共祖先

目录题目来源解题方法如果把二叉搜索树改成二叉树呢?题目来源解题方法思路:只要根节点的值在p, q之间,即为答案了/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */

2020-06-08 22:38:57 119

原创 leetcode面试题67. 把字符串转换成整数

目录题目来源解题方法今天分享一道非常经典的面试题题目来源解题方法class Solution {public: int strToInt(string str) { int i=0; while(str[i] == ' ') i++; int flag=1;//记录符号位 int ans = 0; if(str[i] == '-'){ flag=-1;

2020-06-07 20:53:53 89

原创 leetcode面试题66. 构建乘积数组(对称解法)

目录题目来源解题方法对称题目来源解题方法对称B[i]相当于在数组A[i]左边之和乘A[i]右边之和,我们可以两次for循环实现对称class Solution {public: vector<int> constructArr(vector<int>& a) { if(a.size()==0) return {}; vector<int> ans(a.size()); i

2020-06-07 19:39:47 76

原创 leetcode面试题65. 不用加减乘除做加法(位运算)

目录题目来源解题方法非递归位运算递归位运算今天做到一题比较经典的题目,涉及到位运算的,也是比较常见的算法题,记录一下题目来源解题方法非递归位运算我们发现异或(相同为0,不同为1)是可以用来模拟在不考虑进位时候的总和,而与是可以用来记录哪些位是有2个1的,我们只需要将与后的结果左移,这样就可以知道哪些位是需要进位的,并且左移移除了符号位,不用unsigned int的话,数会过大或者过小,编译器是会报错的,当进位为0时,说明已经获取到了结果class Solution {public:

2020-06-07 17:13:54 122 1

原创 leetcode面试题64. 求1+2+…+n(运算符的短路原则)

目录题目来源解题方法&&的短路机制| |的短路机制非常有意思的一道题目,思路非常简单,考验逻辑运算符的细节题目来源解题方法&&的短路机制class Solution {public: int sumNums(int n) { n && (n+=sumNums(n-1)); return n; }};| |的短路机制class Solution {public: int sumNum

2020-06-06 22:05:32 107

原创 leetcode面试题63. 股票的最大利润(dp+迭代)

目录题目来源解题方法动态规划迭代题目来源解题方法动态规划我们首先需要考虑的是dp数组的选取,在每一天都分为持有股票和未持有股票两种情况,因此我们可以选择dp[n][2]作为数组,dp[i][0]表示前i天未持有股票的最大利润,dp[i][1]表示前i天持有股票的最大利润第i天未持有股票,很可能是前i-1天未持有,第i天也不买入;也有可能是前i-1天持有了,第i天卖掉第i天持有股票,有可能是前i-1天未持有,第i天买入;也有可能是前i-1天就持有了,第i天不卖出直接上代码,非常清晰,我们只需要

2020-06-06 21:50:46 152

原创 leetcode面试题62. 圆圈中最后剩下的数字(约瑟夫环)

目录题目来源解题方法递归迭代约瑟夫环是算法里面非常重要的一个问题,今天分享两种非常巧妙的解法题目来源解题方法递归关键点:第m个人被杀后以第m+1个人为数组头开始找下一个人,那么实际上就是将数组左移m位class Solution {public: int lastRemaining(int n, int m) { return helper(n,m); } int helper(int n, int m){ if(n==1)

2020-06-06 21:12:59 138

原创 leetcode面试题61. 扑克牌中的顺子

目录题目来源解题方法不需要排序排序题目来源解题方法不需要排序同样,如果我们能够知道 5 张扑克牌中的最大值 maxValuemaxValue 和最小值 minValueminValue ,那我们就知道,要使它为顺子需要 maxValue - minValue + 1maxValue−minValue+1 张牌。在查找 maxValuemaxValue 和 minValueminValue 过程中,跳过大小王 00 。如果 maxValue - minValue + 1 > 5maxVal

2020-06-06 14:12:04 245

原创 leetcode面试题60. n个骰子的点数

目录题目来源解题方法动态规划题目来源解题方法动态规划思路描述,n 枚骰子掷出的点数的范围是 [n, 6*n],也就是最后数组的长度为 5n + 1,因为每个骰子掷出每个数字的概率都是 1/6,所以对于 n 枚骰子,每次掷出的数字组合的概率都为 (1/6)^n。这题就可以转化为加起来能达到的目标数字组合有几种。例如2个骰子需要投出4,那就有(1,3)(2,2)(3,1)三种情况,而每种情况都是(1/6)(1/6),因此概率为3(1/6)^2第j个骰子的时候,结果应该加上第j-1个骰子的值,例如d

2020-06-06 13:52:33 439

原创 leetcode面试题59 - II. 队列的最大值(deque+queue)

目录标题题目来源解题方法题目来源解题方法一个queue+一个deque思路:维护一个递减的deque,队首元素为最大值,每当push_back时,移除deque中比此时要加入的元素小的元素,原因是max_value需要最大值,只要当前最大的元素不走,比他小的元素是没有机会的,而用queue来维护一个正常的队列,妙处在于被淘汰的元素都在最大元素之前加入队列,因此只要被淘汰元素不走完,最大元素是不会走的,直接看代码附上代码class MaxQueue {public: deque<

2020-06-05 00:13:16 149

原创 面试题59 - I. 滑动窗口的最大值(deque)

文章目录题目来源解题方法收获题目来源解题方法双端队列deque维护一个递减的双端队列,其队首一定是滑动窗口内的最大元素的下标,每次都新下标对应元素是否比队尾元素大,若是,则队尾元素出队列,判断队首元素下标是否不在滑动队列中了,若是则移除,接着移进来新元素为什么要存下标呢答:因为移动窗口的左右边界都是以下标定义的,这样非常直观为什么要将队列中小于当前元素的元素全部移除呢答:参考“篮球队长”:高三的为队长,则高一高二的都有机会,若高一的为队长,则高二高三都没有机会了,因为等到高一的升为高三时,

2020-06-04 23:48:16 200

原创 leetcode面试题58 - II. 左旋转字符串(一行解决)

目录题目来源最秀解法数学解法题目来源最秀解法附上代码class Solution {public: string reverseLeftWords(string s, int n) { return (s+s).substr(n,n+s.size()-n); }};数学解法思路:看作一个圈class Solution {public: string reverseLeftWords(string s, int n) { stri

2020-06-04 15:38:38 117

原创 C++算法常用方法即头文件

find_first_not of()string c++详解 find_first_not_of() find_first_of()string str="213eqweqwe";str.find_first_not_of("213");find_last_not_of()用法如上istringstreamistreamstring详解头文件

2020-06-04 15:27:24 246

原创 leetcode面试题58 - I. 翻转单词顺序

目录标题题目来源解题方法istreamstring秒解for循环从尾遍历收获题目来源解题方法istreamstring秒解istreamstring详解附上代码class Solution {public:string reverseWords(string s) {string res;stack stack;string str;istringstream ss(s);while(ss >> str){stack.push(str);stack.push("

2020-06-04 14:58:08 184

原创 leetcode面试题57. 和为s的两个数字

文章目录题目来源解题方法双指针哈希表题目来源解题方法双指针思路:为什么想到用双指针呢,其中一个比较重要的提示就是递增数组,首先我们可以先用两个变量i,j存储头尾的索引,接着判断nums[i]+nums[j]是否等于目标target,若等于,则直接返回即可,若小于,说明我们需要更大的左部,因此可以选择令i++,若大于,说明我们需要更小的左部,因此可以选择令j- -,循环结束条件即为i==j附上代码class Solution {public: vector<int> tw

2020-06-03 20:10:54 89

原创 leetcode面试题56 - I. 数组中数字出现的次数(C++异或实现)

这里写自义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mark

2020-06-03 17:43:25 208

空空如也

空空如也

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

TA关注的人

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