自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试中LeetCode常见算法整理——动态规划

面试中LeetCode常见算法整理——动态规划1.斐波那契数列(1)爬楼梯70.Climbing Stairs定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i-2 个楼梯的方法数之和。...

2019-10-10 09:22:54 442

原创 面试中LeetCode常见算法整理——贪心

面试中LeetCode常见算法整理——贪心贪心思想:保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。1. 分配饼干455.Assign Cookies给一个孩子的饼干应当尽量小又能满足该孩子,这样大饼干就能拿来给满足度比较大的孩子。因为最小的孩子最容易得到满足,所以先满足最小的孩子。class Solution {public: int findConte...

2019-10-10 08:40:16 554

原创 面试中LeetCode常见算法整理——排序

面试中LeetCode常见算法整理——排序快速排序用于求解 Kth Element 问题,使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。堆排序用于求解 TopK Elements 问题,通过维护一个大小为 K 的堆,堆中的元素就是 TopK Elements。堆排序也可以用于求解 Kth Element 问题,堆顶元素就...

2019-10-09 15:37:21 311

原创 面试中LeetCode常见算法整理——双指针

面试中LeetCode常见算法整理——双指针1. 有序数组的Two Sum167.Two Sum II - Input array is sortedclass Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int l = 0, r = num...

2019-10-09 06:17:24 259

原创 从含有n个整数的无序数组中找到每个元素后面比它大的第一个数

复习时候看到的一道题,总结了总结。题目描述从含有n个整数的无序数组中找到每个元素后面比它大的第一个数,要求时间复杂度为O(N)。解题思路如果没有时间复杂度要求的话,可以使用二重遍历进行暴力解决。然而参考了各种大牛的博客,将自己的思路总结如下。我们借助了辅助栈的方式进行解决。对于当前遍历的第i个元素有:1. 栈为空,则当前索引i入栈;2.栈不为空,如果栈顶索引元素大于...

2019-10-07 20:30:27 1261 1

原创 面试中LeetCode常见算法整理——链表

面试中LeetCode常见算法整理——链表1. 找出两个链表的交点160.Intersection of Two Linked Lists设链表A的长度为 a + c,B的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针...

2019-10-03 11:17:58 332

原创 面试中常见的算法整理——树

一、递归1. 树的高度104.Maximum Depth of Binary Treeclass Solution {public: int maxDepth(TreeNode* root) { if (!root) return 0; return 1 + max(maxDepth(root->left), maxDepth(root->right)...

2019-10-02 07:10:36 461

原创 LeetCode 238: Product of Array Except Self

LeetCode 238: Product of Array Except Self题目描述给定一个数组 A[0, 1,..., n-1],请构建一个数组 B[0, 1,..., n-1],其中 B 中的元素 B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。要求不能使用除法。解题思路在O(N)时间复杂度下,分别进行自左向右、自右向左两次累乘即...

2019-10-02 06:28:29 137

原创 LeetCode 367: Valid Perfect Square

LeetCode 367: Valid Perfect Square题目描述给定正整数num,编写一个函数,如果num是一个完美的平方,则返回True,否则返回False。注意:请勿使用任何内置库函数,例如sqrt。解题思路平方序列:1,4,9,16,..间隔:3,5,7,...间隔为等差数列,使用这个特性可以得到从 1 开始的平方序列。AC代码class So...

2019-10-02 06:28:01 158

原创 LeetCode 628: Maximum Product of Three Numbers

LeetCode 628: Maximum Product of Three Numbers题目描述给定一个整数数组,找到三个乘积最大的数字并输出最大乘积。解题思路不管数组中数的正负,三个乘积最大的数要么为三个最大的整数,要么两个最小的负数和最大的正数,所以题目的关键在于找出这三个数,最简单的思路就是排序了,不过这样时间复杂度就是O(NlogN)。有其他的更小的时间复杂度算法,我懒...

2019-10-02 06:27:28 122

原创 LeetCode 169: Majority Element

LeetCode 169: Majority Element题目描述给定大小为n的数组,找到多数元素。大多数元素是出现的元素不止 ⌊ n/2 ⌋倍。您可以假定数组为非空,并且多数元素始终存在于数组中。范例1:输入: [3,2,3]输出: 3范例2:输入: [2,2,1,1,1,2,2]输出: 2解题思路先对数组排序,最中间那个数出现次数一定多于 n / 2。AC...

2019-10-01 19:27:17 122

原创 LeetCode 462: Minimum Moves to Equal Array Elements II

LeetCode 462: Minimum Moves to Equal Array Elements II题目描述给定一个非空的整数数组,找到使所有数组元素相等所需的最小移动数,其中移动是将选定元素增加1或将选定元素减少1。例:输入:[1,2,3]输出:2说明:仅需要两个动作(记住每个动作递增或递减一个元素):[1,2,3] => [2,2,3] => [2,2...

2019-10-01 19:09:33 151

原创 LeetCode 172: Factorial Trailing Zeroes

LeetCode 172: Factorial Trailing Zeroes题目描述给定一个整数n,统计其阶乘尾部0的个数解题思路阶乘尾部的 0 由 2 * 5 得来,2 的数量明显多于 5 的数量,因此只要统计有多少个 5 即可。对于一个数 N,它所包含 5 的个数为:N/5 + N/5^2 + N/5^3 + ...,其中 N/5 表示不大于 N 的数中 5 的倍数贡献一个...

2019-10-01 17:11:09 142

原创 LeetCode 168: Excel Sheet Column Title

LeetCode 168: Excel Sheet Column Title题目描述给定一个正整数,返回其相应的列标题,如Excel工作表中所示。例如:1->A2->B3->C...26->Z27->AA28->AB...701->ZY...解题思路这道题相当于将10进制转化为二进制,不过因为是从1开始计算的,而...

2019-10-01 17:07:11 131

原创 LeetCode 405: Convert a Number to Hexadecimal

LeetCode 405: Convert a Number to Hexadecimal题目描述给定一个整数,编写一个算法将其转换为十六进制。对于负整数,使用二进制补码表示方法。注意:十六进制(a-f)中的所有字母都必须小写。 十六进制字符串不得包含额外的前导0串。如果数字为零,则用单个零字符表示'0';否则,十六进制字符串中的第一个字符将不是零字符。 保证给定的数字适...

2019-10-01 16:25:35 158

原创 LeetCode 504: Base 7

LeetCode 504: Base 7题目描述给定一个整数,返回它的七进制表示的字符串。解题思路10进制转n进制最基本的转换思路:通过不断对n取余、取模即可,注意给定整数的正负。AC代码class Solution {public: string convertToBase7(int num) { if (num == 0) return "0"; i...

2019-10-01 13:16:42 164

原创 面试中常见的算法整理——数学

目录计算素数最大公约数和最小公倍数最大公约数最小公倍数进制转换十进制转七进制十进制转十六进制二十六进制统计阶乘尾部有多少个 0相遇问题改变数组元素使所有的数组元素都相等多数投票问题数组中出现次数多于 n / 2 的元素找出数组中的乘积最大的三个数构建乘积数组判断一个数是否是完全平方数计算素数LeetCode 204: C...

2019-10-01 12:06:56 334

原创 LeetCode 204: Count Primes

LeetCode 204: Count Primes题目描述给定一个非负整数,计算小于该整数的所有素数(最小的素数为2)。解题思路该题的解法有一个特定的名字:埃拉托斯特尼筛法,下面简单说一下,具体可以参阅网上的资料。判断一个数x是否是合数,只要依次除以2至sqrt(x)间的素数,判断是否整除即可。埃拉托斯特尼筛法基于以下原理,给定一个素数n>1,kn是一个合数(k&g...

2019-10-01 11:59:36 120

原创 LeetCode 318: Maximum Product of Word Lengths

LeetCode 318: Maximum Product of Word Lengths题目描述字符串数组的字符串只含有小写字符。求解字符串数组中两个字符串长度的最大乘积,要求这两个字符串不能含有相同字符。解题思路很明显,直接循环遍历会超时。然后参考别人的思路有了如下操作。这里有一个小trick,就是用二进制来表示26个字母:用1,2,4,8,16,32,…2^25,来表示...

2019-10-01 10:34:58 133

原创 LeetCode 338: Counting Bits

LeetCode 338: Counting Bits题目描述统计从 0 ~ n 每个数的二进制表示中 1 的个数。解题思路对于数字 6(110),它可以看成是 4(100) 再加一个 2(10),因此res[i] = res[i&(i-1)] + 1。AC代码class Solution {public: vector<int> countBi...

2019-10-01 10:34:04 123

原创 LeetCode 371: Sum of Two Integers

LeetCode371: Sum of Two Integers题目描述不适用加减操作计算两个整数的和。解题思路经典的题,利用异或和位与实现两个数的加法,a^b表示没有考虑进位的情况下两数的和,(a&b)<<1就是进位。具体原理此处不再赘述。需要注意的是,LeetCode提交会报错(Line 4: Char 40: runtime error: left sh...

2019-09-30 21:05:38 178

原创 LeetCode 693: Binary Number with Alternating Bits

LeetCode 693: Binary Number with Alternating Bits题目描述判断一个整数的二进制表示是否会出现连续的 0 和 1。解题思路对于 1010 这种位级表示的数,把它向右移动 1 位得到 101,这两个数每个位都不同,因此异或得到的结果为1111。AC代码class Solution {public: bool hasAlter...

2019-09-30 20:41:50 222

原创 LeetCode 342: Power of Four

LeetCode342: Power of Four题目描述给定一个整数,编写一个函数以确定它是否为4的幂。解题思路4的整数次幂为整数并且它的的二进制表示有且只有一个奇数位为1。AC代码class Solution {public: bool isPowerOfFour(int num) { return num > 0 && (num&...

2019-09-30 20:03:13 126

原创 LeetCode 231: Power of Two

LeetCode 231: Power of Two题目描述给定一个整数,编写一个函数以确定它是否为2的幂。解题思路2的整数次幂的二进制表示只有一个 1 存在且为正数,所以就是判断给定的整数是否为正数并且二进制表示只有一个1。通过判断n & (n - 1)操作后的数是否为0即可。AC代码class Solution {public: bool isPowerO...

2019-09-30 17:19:05 101

原创 LeetCode190: Reverse Bits

LeetCode190: Reverse Bits题目描述颠倒一个32位无符号整数的比特位。解题思路通过位操作来实现,具体见代码注释。AC代码class Solution {public: uint32_t reverseBits(uint32_t n) { uint32_t res = 0; for (int i = 0; i < 32; ++i) ...

2019-09-30 16:57:13 226

原创 LeetCode 260: Single Number III

LeetCode 260: Single Number III题目描述给定一个数字数数组nums,其中两个元素恰好只出现一次,所有其他元素恰好出现两次。查找仅出现一次的两个元素。解题思路两个不相等的元素在二进制位级表示上必定会有一位存在不同。将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果。diff &= -diff 得到出 diff 最右侧不为 0 的位...

2019-09-30 16:03:45 123

原创 LeetCode 268: Missing Number

LeetCode 268: Missing Number题目描述给定一个含有n个元素的数组,数组中所有的元素在 0-n 之间,但是有一个数是缺失的,要求找到这个缺失的数。解题思路可采用位异或的思路,将数组中所有的元素取位异或,然后与所有的下标取位异或,最后再位异或n即可得最终的结果。AC代码class Solution {public: int missingN...

2019-09-30 15:42:47 108

原创 LeetCode 136: Single Number

LeetCode 136:Single Number题目描述给定一个数组,数组中只有唯一一个不重复的元素,找出这个元素。解题思路利用位运算:两个相同的位异或结果为0,对所有数进行异或操作,最后的结果就是单独出现的那个数。AC代码class Solution {public: int singleNumber(vector<int>& nums) ...

2019-09-30 13:04:57 116

原创 面试中常见的算法整理——位运算

位运算基本原理0s表示一串0,1s表示一串1。x ^ 0s = x x & 0s = 0x | 0s = x x ^ 1s = ~xx & 1s = x x | 1s = 1sx ^ x = 0 x & x = xx | x = x常用的tipsx ^ 1s = ~x:...

2019-09-30 12:55:27 291

原创 LeetCode 461: Hamming Distance

LeetCode 461: Hamming Distance题目描述给定两个整数,统计两个数的二进制表示有多少位不同。解题思路见代码注释。AC代码//统计两个数的二进制表示有多少位不同class Solution {public: int hammingDistance(int x, int y) { int z = x ^ y; //通过位异或操作获取到两个数...

2019-09-30 12:52:04 124

原创 剑指offer:扑克牌顺子

题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...

2019-09-16 23:01:23 132

原创 剑指offer:圆圈中最后剩下的数

题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....

2019-09-16 22:52:52 232

原创 股票的最大利润

题目描述可以有一次买入和一次卖出,买入必须在前。求最大收益。解题思路典型的动态规划问题,思路见下面的代码注释。AC代码class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); int dp_0 =...

2019-09-16 21:21:59 149

原创 剑指offer:求 1+2+3+...+n

题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。利用这一特性,将递归的返回条件取...

2019-09-16 20:40:18 173

原创 剑指offer:不用加减乘除做加法

题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路a ^ b 表示没有考虑进位的情况下两数的和,(a & b) << 1 就是进位。递归会终止的原因是 (a & b) << 1 最右边会多一个 0,那么继续递归,进位最右边的 0 会慢慢增多,最后进位会变为0,递归终止。AC代码class S...

2019-09-16 20:18:16 136

原创 剑指offer:把字符串转换成整数

题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述输入一个字符串,包括数字字母符号,可以为空输出描述如果是合法的数值表达则返回该数字,否则返回0解题思路不说了,很简单,重点是符号位的判断,还有就...

2019-09-16 16:41:04 131

原创 树中两个节点的最低公共祖先

题目描述Leetcode : 235. Lowest Common Ancestor of a Binary Search TreeLeetcode : 236. Lowest Common Ancestor of a Binary Tree解题思路AC代码//leetcode 235class Solution {public: TreeNode* lowest...

2019-09-16 16:33:46 136

原创 剑指offer索引

目录剑指offer:构建乘积数组剑指offer:树中两个节点的最低公共祖先剑指offer:把字符串转换成整数剑指offer:不用加减乘除做加法剑指offer:求 1+2+3+...+n剑指offer:股票的最大利润剑指offer:圆圈中最后剩下的数剑指offer:扑克牌顺子...

2019-09-16 16:19:27 886

原创 剑指offer:构建乘积数组

题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。解题思路以{1, 2, 3,4, 5}为例进行两轮累乘:从左往右累累乘:{1, 1, 2, 6, 24};从右往左累乘:{120, 60, 40, 30, 24}。...

2019-09-16 16:17:58 213

原创 剑指offer:正则表达式匹配

题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路1. 如果模式的下一个字符不为"*" (1)如果当前字符匹配,则匹配...

2019-09-16 10:24:43 90

空空如也

空空如也

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

TA关注的人

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