- 博客(85)
- 收藏
- 关注
原创 正则表达式 看完这些就够了
又好久没写文章了,最近攒了几个话题,还没来得及写,在年末的最后一天,还是要写一篇,跨年啦~一篇文章写到2020年。不抛弃不放弃,过几年再看看现在写的,就如同我现在看之前写的。还有就是刚刚研究了一下如何做个标题党,来了一个(哈哈)。废话不多说,开始正题。我们都会或多或是的用到过正则匹配,大家真的清楚用的是哪种正则吗?各种语言的正则又有哪些异同呢?目录1 各种各样的正则表达式2 b...
2020-01-01 18:25:39 721
原创 41. First Missing Positive 寻找第一个缺失的正数
例子1:Input: [1,2,0]Output: 3例子2:Input: [3,4,-1,1]Output: 2例子3:Input: [7,8,9,11,12]Output: 1思路:首次遍历,对元素值为(0,n)区间内的元素nums[i],不在对应下标nums[i] - 1位置的进行交换顺序。第二次遍历,判断每个元素nums[i] 是否等于i+1. 找到...
2019-09-06 17:02:29 206
原创 84. Largest Rectangle in Histogram 寻找最大的矩形
题意:寻找面积最大的矩形。思路:此题和第42题求解总共存水量的题目都可以使用栈的方法解决。(1)遍历height, 当要插入元素比栈顶元素大时,向栈顶插入元素;当要插入元素比栈顶元素小时,取栈顶元素到当前元素计算面积。(2)先向heights的结尾放入下标0,为了能够驱动当每个矩阵都是升序的时候,从后向前计算每个能够组成的矩形的面积,不断寻找最大的面积,首先,先会计算最后一个矩形的...
2019-09-06 16:06:26 314
原创 128. Longest Consecutive Sequence 寻找最长连续子数组
在一个乱序数组中寻找最长的连续子数组。注意:有重复元素时,只计数一次。例子1:Input: [100, 4, 200, 1, 3, 2]Output: 4Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.例子2:Input: ...
2019-09-06 14:23:55 249
原创 42. Trapping Rain Water 计算储水量
给定一个数组, 表示高度,计算存水量。例子:Input: [0,1,0,2,1,0,1,3,2,1,2,1]Output: 6方法1:动态规划int trap(vector<int>& height) { if (height.empty()) { return 0; } int n = height.size(); int lef...
2019-09-06 11:51:12 294
原创 54. Spiral Matrix 螺旋矩阵
将一个二维矩阵,螺旋方式遍历。Example 1:Input:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]Output: [1,2,3,6,9,8,7,4,5]Example 2:Input:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]Output: [1,2,3,4,...
2019-05-26 18:10:06 149
原创 15. 3Sum 找到数组中三数之和为给定值的组合
找到数组中三数之和为给定值的组合。Given array nums = [-1, 0, 1, 2, -1, -4],A solution set is:[ [-1, 0, 1], [-1, -1, 2]]思考:求解三数之和,会先联想到求解两数之和。先来回忆一下两数之和怎么求解。方法1,使用unordered_map存放数组值和下标,再遍历数组从寻找是否又差值,有就找到一个...
2019-05-26 17:30:05 1554
原创 152. Maximum Product Subarray 最大乘积子数组
给定一个数组,获取数组中子数组的最大乘积。思考:最初想到的就是暴力求解方法,时间复杂度O(n^2)枚举出所有解,最终得到最大乘积。看了discuss中发现有更好的解法。动态规划,用两个变量当前的极大值和极小值,因为后面乘以一个负数的话,极大值会变成极小值,而再乘以一个负数又会变成极大值。所以中间过程中只需要记录这两个值即可。解法: int maxProduct(vector&l...
2019-05-26 17:14:11 145
原创 55. Jump Game 是否能跳到最后
数组中每个元素表示从当前位置能够跳的步数,判断是否能跳到最后。思考:本题在solution中有4中解法,(方法1)dfs,实际运行会超时,因为会有数组很长的case. (方法2)dfs优化版,不过也会超时。(方法3)动态规划。(方法4)贪心算法。解法:(方法1)dfs, 虽然会超时,不过这种解法需要掌握。 bool canJumpFromPos1(int pos, vect...
2019-05-26 14:58:25 202
原创 33. Search in Rotated Sorted Array
在排序的旋转数组中查找一个值。ex. [4,5,6,7,8,0,1] 是排序的数组,以某一个位置做了一次旋转后的结果。 target 8. 进行查找,返回下标 4.思考:使用二分查找的变种,class Solution {public: int search(vector<int>& nums, int target) { int beg...
2019-05-26 13:09:26 139
原创 34. Find First and Last Position of Element in Sorted Array
对排序的数组查找目标值的左右边界。ex. [5,7,7,8,8,10] , target 8 => [3,4].思考:对于已经排序的数组,通常会想到二分插入,这道题使用二分查找的变体即可。分别找到左右边界。 int LeftBound(vector<int> &nums, int target) { int begin = 0;...
2019-05-26 12:31:05 134
原创 73. Set Matrix Zeroes
如果某个元素是0,那么将它所在的一行和一列都改为0.思路:注意,如果在原地直接修改, 不能影响后面的判断。方法有三种:方法1:使用辅助空间记录需要改为0的行和列,空间复杂度O(m+n), 时间复杂度O(m*n)void setZeroes(vector<vector<int>>& matrix) { std::set<int&...
2019-05-26 00:26:38 136
原创 105. Construct Binary Tree from Preorder and Inorder Traversal
已知前序序列和中序序列,构建二叉树。解法:递归 TreeNode *build(vector<int>& preorder, int preStart, int preEnd, vector<int> &inorder, int inStart, int inEnd) { if...
2019-05-25 23:57:10 115
原创 75. Sort Colors 对三种颜色进行排序
0, 1, 2 分别表示三种颜色。要求对它们进行排序。Example:Input: [2,0,2,1,1,0]Output: [0,0,1,1,2,2]要求:使用 a pass 算法,而不是two-pass算法。这里指的两步算法是,先统计出来0,1,2的count,再按照各自的数量放到数组中。思考:没看要求时,想到的方法也是要求中提到的那种two-pass算法,再思考一步的策略...
2019-05-25 21:09:31 762
原创 380. Insert Delete GetRandom O(1)
设计一个数据结构,插入,删除,随机获取其中一个数值操作都是O(1)的时间复杂度。思考:首先从基本的数据结构开始思考,数组、链表、hash表,map,set等等,发现单一的数据结构是无法支持那些操作都是O(1)的时间复杂度。进而再考虑叠加数据结构的方法。vector + unordered_map 是 不错的叠加方法,用数组存放具体数据,用hash表存放数据的索引。之后再查找时,可以通过索引,再...
2019-05-25 19:43:53 208
原创 11. Container With Most Water 最多存水量
求最多能够存水量,(长*高)Example:Input: [1,8,6,2,5,4,8,3,7]Output: 49思考: 这道题有两种解法,方法1,暴力求解,时间复杂度O(n^2),计算出每个可能的面积取最大值。方法2,两个指针,一个left,一个right指针,计算面积, 每次比较这两个指针,低的一边移动指针,这种方法只需要遍历一遍数组。不过不太好想到。解法:(方法2)...
2019-05-25 18:46:21 238
原创 289. Game of Life
按照 规则 修改二维数组元素值。二维数组中只有1和0, 1表示live, 2表示dead.规则如下:1. 一个存活的cell,它有小于两个邻居dead,那么它在下一代die.2. 一个存活的cell,它有2到3个邻居live,那么它在下一代也live.3. 一个存活的cell,它有多于3邻居die,那么它在下一代也die.4. 一个dead的cell,它有3个邻居live,...
2019-05-25 18:28:13 173
原创 62. Unique Paths 计算从二维数组(0,0)->(m-1,n-1)路径数量
计算从二维数组 (0,0)->(m-1,n-1) 路径数量思考:最初考虑使用dfs解决,这题不适合使用dfs, 而且会超时。正确解法使用动态规划解决。看到下面的递推公式也就明白了。方法1:使用二维的数组存放当前的路径数量。 int uniquePaths(int m, int n) { vector<vector<int>> pat...
2019-05-25 17:09:19 359
原创 287. Find the Duplicate Number 寻找一个重复的元素
数组n+1个元素, 元素值范围1到n,其中有一个重复的元素,寻找重复元素。要求:1.不能修改原数组。2.空间复杂度O(1)。3.时间复杂度小于O(n^2)。4.数组中有只有一个重复的元素,但可能重复多次。思考:如果没有哪些要求解题就比较简单了, 方法也多样,例如(方法1)对原数组进行排序,比较当前元素和前一个元素是否相同。(方法2)借助hash表set,遍历元素,如果se...
2019-05-25 16:49:48 174
原创 79. Word Search 在二维矩阵中寻找某个word是否出现
例如:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]Given word = "ABCCED", return true.Given word = "SEE", return true.Given word = "ABCB", return false.难度:【medium】思...
2019-05-19 23:26:09 194
原创 56. Merge Intervals 合并重叠的间隔
对一个序列,将重叠的间隔进行合并。例如:[[1,4],[2,3]] => [[1,4]][[1,3],[2,6],[8,10],[15,18]] => [[1,6],[8,10],[15,18]]难度:【medium】思路:这道题不是很难,只要把各种case考虑到就基本可以写对。首先对序列进行排序,这里序列题目中使用的是vector<vector<...
2019-05-19 17:56:49 209
原创 73. Set Matrix Zeroes
当矩阵中有元素是0时,就将它所在的那一行和那一列全都置为0.例如:Input: [ [1,1,1], [1,0,1], [1,1,1]]Output: [ [1,0,1], [0,0,0], [1,0,1]]难度:【medium】思考:最初想到的在遍历矩阵每个元素时,如果该元素是0,那么就将它所在的行和列的元素都改为0,可是再一想,发现再遍历下面...
2019-05-19 16:08:12 131
原创 162. Find Peak Element 寻找峰值元素
从数组中找到一个峰值,对于n个元素的数组,认为nums[-1] = nums[n] = -∞。峰值的含义:和它相邻的元素相比,比它左右元素值都大,就是峰值,返回峰值的下标。数组中可能有多个峰值,找到一个返回即可。例如:Input: nums = [1,2,3,1]Output: 2 (下标为2的元素是一个峰值)难度:【medium】思路:(方法1)最先想到的方法就是暴力方法。这...
2019-05-18 22:01:22 608
原创 48. Rotate Image 二维数组向右旋转90度
难度:【medium】对 n * n 的二维数组向右旋转90度。例如:思路:(方法1) 最简单也是最容易想到的解法,就是开辟一个和二维数组相同大小的临时空间,之后将第0行放到临时二维数组的第n-1列,第1行放到临时二维数组的第n-2列,依次类推。使用这种方法在leetcode中也能够通过,但是需要额外的空间。(方法2)这个是discuss中看到的解法,先按行翻转,再按照左对角线...
2019-05-18 16:14:17 578
原创 78. Subsets 求数组的子数组
难度:【medium】for ex. 输出的子数组的顺序没有限制。Input: nums = [1,2,3]Output:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]主要由两种方法:方法1:深度优先搜索 vector<vector<int>> subs...
2019-04-07 17:07:51 558
原创 238. Product of Array Except Self
除了当前元素之外的元素相乘。要求:不能用除法难度:【medium】for ex.Input: [1,2,3,4]Output: [24,12,8,6]// 24 = 2*3*4// 12 = 1*3*4// 8 = 1*2*4// 6 = 1*2*3class Solution {public: vector<int> productEx...
2019-04-07 16:48:51 159
原创 Client: curl POST 请求超过1024字节 Server: HTTP 100-continue
当我们使用 linux 的curl命令,或是调用libcurl接口,由客户端向服务器端发送 POST 消息的时候,很有可能忽视一个问题就是消息体长度问题,作为网络通信,这个问题是需要我们所了解的,下面就详细介绍一下。当消息体的长度超过1024字节时,客户端并不会直接将POST请求的消息发送给服务器端,而是会分两步走,Client:发送POST 请求,header中默认带有 {"Expect...
2019-04-07 01:24:44 2067
原创 STL 深入理解 sort 函数 和 严格弱序比较
原来只会使用sort函数,却没有对它进行深入思考和探索。下面我想通过几个近期我对它的一些疑问,来深入浅出的谈谈这个sort函数。目录1. 如何使用sort 函数?2. sort函数使用的底层排序算法是什么?3. 什么是严格弱序比较?3.1【小于比较(LessThan comparable)】3.2【严格弱序(strict weakordering)】3.3...
2019-04-01 00:15:11 2391 1
原创 leetcode array数组题目整理 (持续更新中。。。)
持续更新中。。。【leetcode Top Interview Questions】, 【array】分类下面: easy 13道,medium 22道(lock 2),hard 5道 (2019.03.31)【easy】(13道题)1.Two Sum26. Remove Duplicates from Sorted Array 对排序的数组删除重复的元素53. Maxi...
2019-03-31 18:24:51 933
原创 122. Best Time to Buy and Sell Stock II 股票最佳买入和卖出时间
允许股票买入和卖出多次,并且要求只能在卖出后,才能买入。这道题和121. Best Time to Buy and Sell Stock 股票最佳买入和卖出时间不同,121这道题相对比较简单,只要求,买卖一次。而这道题可以买卖多次,得到最大的收益。例如:Input: [7,1,5,3,6,4]Output: 7Explanation: Buy on day 2 (price =...
2019-03-31 18:24:18 238
原创 268. Missing Number 查找缺少的元素
数组中的元素正常是0,1,2,n。 数组中元素有n-1个元素,查找缺少的那个元素。例如:Input: [9,6,4,2,3,5,7,0,1]Output: 8 (数组中缺少的元素是8)难度:【easy】这道题我想出了三种方法:第一种方法:对原数组进行排序,之后对比下标和该下标对应的元素值,如果不同,那么下标就是缺少的元素。class Solution {public...
2019-03-31 17:49:41 169
原创 217. Contains Duplicate 判断数组中是否有重复元素
例如:Input: [1,2,3,1]Output: true (有重复元素1)方法1: 对原数组进行排序,再遍历数组,比较相邻两个元素是否相等。time: O(nlogn), space:O(1)方法2:创建一个哈希表,遍历数组统计每个元素出现次数。time: O(n), space:O(n)下面是方法1的解:class Solution {public: bo...
2019-03-31 17:36:29 199
原创 189. Rotate Array 旋转数组元素
难度:【easy】按照指定次数k旋转数组,每次将最后一个元素挪到最前面。这里有个陷阱,比如数组的总长度是3,指定次数为7,那么需要移动的次数就是7%3=1次。如果指定次数是6,那么6%3=0,就不用挪动元素。class Solution {public: void RotateArray(vector<int> &nums, int begin, i...
2019-03-31 17:32:50 215
原创 169. Majority Element 求数组中满足出现次数的元素
当数组中有奇数个元素时,出现次数 大于等于 n/2+1次。当数组中有偶数个元素时,出现次数 大于等于 n/2次。难度:【easy】思路:常规的方法,第一种方法:首先先用一个hash表统计出每个元素出现的次数,再遍历一遍hasp表找到满足出现次数的元素。这样做的时间复杂度O(n),空间复杂度O(n).第二种方法:对原有数组进行排序,取下标为n/2的元素,即为所求。...
2019-03-31 17:26:39 146
原创 283. Move Zeroes 将数组中值为0的元素移动到后面
例如:Input: [0,1,0,3,12]Output: [1,3,12,0,0]要求:1. 就地移动,不借助额外空间。2. 最小化操作次数。难度:【easy】思路:遍历一次数组,将不为0的元素向前移动。使用双指针解决。注意事项:非0元素的相对顺序不能改变。时间复杂度:O(n)空间复杂度:O(1)方法1:class Solution {...
2019-03-31 16:49:03 438
原创 121. Best Time to Buy and Sell Stock 股票最佳买入和卖出时间
Input: [7,1,5,3,6,4]Output: 5Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Not 7-1 = 6, as selling price needs to be larger than buying price....
2019-03-30 23:38:51 286
原创 118. Pascal's Triangle 打印杨辉三角
难度:【easy】class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> rows; for (int i = 0; i < numRows; ++i) { ...
2019-03-30 22:10:41 166
原创 88. Merge Sorted Array 合并两个排序数组
两个排序的数组nums1和nums2.。进行排序合并到nums1, nums1有足够的空间。难度:【easy】思路:对两个数组倒序比较,因为如果按照正序进行比较,nums2的元素需要往nums1里面插入时,nums1中对应位置及其后面的所有元素就需要向后面移动,所以这里选择倒序排序比较好。时间复杂度O(m+n)class Solution {public: void...
2019-03-30 21:55:41 251
原创 66. Plus One 把数组看成一个数值进行加1
例如:Input: [1,2,3]Output: [1,2,4]Explanation: The array represents the integer 123.难度:【easy】把[1,2,3]看着数值123,对它加1,结果就是124.需要考虑进位情况。class Solution {public: vector<int> plusOne(ve...
2019-03-30 21:31:54 188
原创 53. Maximum Subarray 寻找sum最大的子数组
Given an integer arraynums, find the contiguous subarray(containing at least one number) which has the largest sum and return its sum.例子:Input: [-2,1,-3,4,-1,2,1,-5,4],Output: 6Explanation: [...
2019-03-30 18:43:30 327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人