
细节算法
Czy_whlg
不忘本心!
展开
-
Number of Subarrays with Bounded Maximum(区间子数组个数)
We are given an array A of positive integers, and two positive integers L and R (L <= R).Return the number of (contiguous, non-empty) subarrays such that the value of the maximum array element in that subarray is at least L and at most R.Example :I原创 2020-08-15 16:48:56 · 215 阅读 · 0 评论 -
Swap Adjacent in LR String(交换字符串LR位置)
In a string composed of 'L', 'R', and 'X' characters, like "RXXLRXRXL", a move consists of either replacing one occurrence of "XL" with "LX", or replacing one occurrence of "RX" with "XR". Given the starting string start and the ending string end, return T原创 2020-08-10 11:12:17 · 300 阅读 · 0 评论 -
Reach a Number(到达目的地)
You are standing at position 0 on an infinite number line. There is a goal at position target.On each move, you can either go left or right. During the n-th move (starting from 1), you take n steps.Return the minimum number of steps required to reach t原创 2020-08-06 16:49:41 · 484 阅读 · 0 评论 -
Monotone Increasing Digits
738.Monotone Increasing DigitsGiven a non-negative integerN, find the largest number that is less than or equal toNwith monotone increasing digits.(Recall that an integer hasmonotone increasi...原创 2020-04-22 20:58:40 · 184 阅读 · 0 评论 -
My Calendar II
731.My Calendar IIImplement aMyCalendarTwoclass to store your events. A new event can be added if adding the event will not cause atriplebooking.Your class will have one method,book(int star...原创 2020-04-20 08:32:23 · 173 阅读 · 0 评论 -
My Calendar I
729.My Calendar IImplement aMyCalendarclass to store your events. A new event can be added if adding the event will not cause a double booking.Your class will have the method,book(int start, i...原创 2020-04-19 23:26:28 · 220 阅读 · 0 评论 -
Find K Closest Elements
Given a sorted array, two integerskandx, find thekclosest elements toxin the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are always prefer...原创 2020-03-14 20:54:20 · 164 阅读 · 0 评论 -
Exclusive Time of Functions
1.解析题目大意,计算每一个函数执行的时间。2.分析题目看起来蛮简单的,但其实不然,最难理解的部分,就是在"end"状态这里,实际上,当检测到"end"状态的时候,不只是当前对应的id的函数会执行一个单位的时间,(这里主要是方便处理而已)上一个函数也会执行一个单位,然后上一个函数执行的起始时间要加1,其他部分就比较容易理解啦,利用一个栈保存当前最新执行的函数id,当检测到一...原创 2020-03-05 21:34:59 · 158 阅读 · 0 评论 -
Task Scheduler
1.解析题目大意,求解最优的系统调度时间。要求,两个相同任务之间的时间间隔不能小于n2.分析这道题没什么套路,我个人感觉还是比较难的,尤其题目意思,解题思路也不是很容易想到。我最初看到求解最值,我以为是动态规划。参考@Grandyang博主的思路,讲解的很清晰。我们可以先看一个例子,例如:['A', 'B', 'A', 'B','A','B','C'] n = 2...原创 2020-02-28 20:36:04 · 151 阅读 · 0 评论 -
Valid Square
1.解析题目大意,判断所给的点是否能构成正方形。2.分析题目还是蛮简单的。我采用了最简单的思路,给定四个没有任何顺序的点,所以,第一步先大致确定每个点的位置,根据每个点在X轴上的位置对这四个点进行排序,然后计算宽,然后根据Y轴上的位置,计算高;分别判断这四条边是否相等,若相等,再进一步判断两边之和是否等于对角线,若满足,则是正方形。这里,需要注意特殊情况:所有的点是重合的,即只...原创 2020-02-26 21:15:44 · 228 阅读 · 0 评论 -
Minimum Number of Arrows to Burst Balloons
1. 解析题目大意,有n个气球,每个气球的宽度可以用x轴上的两个点(start, end)来表示,求解要将所有气球都打破,至少需要多少支箭。如果这支箭所处的位置在(start, end)范围内,则可以将这个气球打破。从字面上可能比较难理解。我们可以抽象出来,实际上就是这道题Non-overlapping Intervals换了一种说法。即给n个区间,每个区间的范围为[start, e...原创 2019-12-27 19:21:54 · 212 阅读 · 0 评论 -
4Sum II
1. 解析题目大意,在4个数组中求解和为0的所有组合。2. 分析最开始我想到的解法是,先将4个数组进行排序,然后用4层循环进行求解,但无法AC,原因是时间复杂度为。参考了@Grandyang博主的思路,可以将4个数组分成2组,利用哈希表m1保存数组A和B任意两个元素的和,哈希表m2保存数组C和D任意两个元素的和,然后依次取这两个哈希表中元素之和为0的元素出现的次数,进行相乘即可对...原创 2019-12-27 17:17:14 · 112 阅读 · 0 评论 -
Non-overlapping Intervals
1. 解析题目大意,去掉最少的区间,使剩余的区间不重叠。注意[1, 2]与[2, 3]区间是不重叠的,虽然在2这个点上重叠,但认为不重叠的就行。2. 分析这道题整体上是不难的,思路有点类似于Queue Reconstruction by Height,我们将所有的区间根据起点的大小进行排序,如果起点相同,则终点值小的排在前面。例如:[ [1, 2], [2, 3], [3, 4],...原创 2019-12-23 17:07:13 · 218 阅读 · 0 评论 -
Reconstruct Original Digits from English
1. 解析题目大意,英文形式的数字被表示成无序的字符串,将其还原,并按照从小到大的顺序返回。2. 分析个人感觉这道题出的还是蛮不错。思路我想到了,但代码是参考@Grandyang博客写的,大家可以去看一下,写的很清晰。如果我们数字的字符串表示形式,就会发现,某个特定的字符只会出现在一个数字当中。在"zero", "one", "two", "three", "four", "...原创 2019-12-19 18:27:01 · 219 阅读 · 0 评论 -
Queue Reconstruction by Height
1. 解析题目大意,重排队列,h是某个人的身高,k为站在这个人前面的人数2. 分析这道题实际上是很简单的~~~然而悲催的是,我竟然刚开始没想出来,哎~~~参考@Grandyang的解法,我们可以先按照身高进行排序,然后只需根据后面的k进行调整即可。例如:[ [7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2] ]排序后:[ [7...原创 2019-12-16 19:55:48 · 176 阅读 · 0 评论 -
Lexicographical Numbers
1. 解析题目大意,给定正整数n,求解字典顺序排列的[1, n]。2. 分析我最先想到的是利用set集合的有序性,将[1, n]表示成字符串的形式放进set集合当中,集合中的值本身是按照字典顺序进行排序的,然后将字符串重新转换成数字即可。class Solution {public: vector<int> lexicalOrder(int n) { ...原创 2019-12-09 17:36:41 · 119 阅读 · 0 评论 -
Insert Delete GetRandom O(1)
1. 解析题目大意,设计一个结构,可以在常数级时间内O(1)实现集合(无重复元素)的增加、删除、获取随机数2. 分析我最先想到的是hashset进行操作,写到getRandom函数,突然发现在O(1)时间复杂度范围内无法获取数组中的任意一个数值。参考@Grandyang博主的思路,若要在O(1)时间复杂度内根据指定索引返回随机数,vector结构无疑是最好。增加insert和返回随...原创 2019-12-07 12:35:40 · 155 阅读 · 0 评论 -
Increasing Triplet Subsequence
1. 解析题目大意,求解子序列是否存在一个长度为3的递增子序列。2. 分析涉及子序列问题,一般都是动态规划。与Longest Increasing Subsequence最大的不同在于,只要求长度为3即可,思路是一样的。subsequence[i]表示[0, i]内递增子序列的最大长度,每次向后检索,然后更新当前的最大长度即可,前面依赖的状态之前已经求解过,不过题目要求O(1)的...原创 2019-12-06 21:16:01 · 259 阅读 · 0 评论 -
Find K Pairs with Smallest Sums
1. 解析题目大意,求前k个和最小的pair对,pair中的元素一个来自第一个数组nums1,另外一个来自第二个数组nums2。2. 分析题目要求前k个最小的pair对,我最先想到的是,采用hashtable自动排序的功能,将来自不同数组的两个元素的和作为key,然后再将这两个元素组成的pair对作为value,两个元素的和可以相等,即意味着hashtable要能够存储key值相同...原创 2019-12-04 17:19:49 · 176 阅读 · 0 评论 -
Wiggle Sort II
1. 题目大意摆动数列排序,即相邻两个数的间距分布为 正、负、正、负、...2. 分析题目不是很难,主要是寻找规律。先将数组进行排序,然后从中间将两边的数分割开,每次取左边的最后一个和右边的最后一个,最后放在一个新的数组即可,时间复杂度为O(n),但空间复杂度为O(n)。空间复杂度为O(1)的很难,可以参考一下@Grandyang的博客。例如:[1, 3, 2, 2, 3, ...原创 2019-12-03 17:38:29 · 164 阅读 · 0 评论 -
Verify Preorder Serialization of a Binary Tree
1. 解析题目大意,给定一个','分割开的字符串,判断是否是先序遍历。树的3种遍历递归都比较简单,然而这题反其道而行之,未必就会啦~~~2. 分析我想到的一种解法就是,采用非递归方式的先序遍历,将解析字符串的过程看做是先序遍历的过程,不断将左节点进栈,即不停地从前往后解析字符串,每个','分割开的字符串就是一个节点,'#'代表空节点,直到碰到空节点。然后回溯,返回栈顶节点,即根节...原创 2019-11-28 19:25:41 · 106 阅读 · 0 评论 -
Maximum Product of Word Lengths
1. 解析题目大意,求解任意两个无公共字符的字符串长度乘积的最大值.2.分析很容易想到的解法就是,利用二层循环,第1层循环获取第1个字符串,第2层循环获取第2个字符串,将第1个字符串和第2个字符串进行比较,判断是否存在公共的字符,若存在,检索下一个,若不存在,计算当前这两个字符串的乘积,并与当前的最大长度进行比较,进行更新。判断两个字符串之间是否存在公共字符,我采取的办法是:将第...原创 2019-11-27 17:32:53 · 136 阅读 · 0 评论 -
Perfect Squares
1. 解析题目大意,将正整数拆分成多个正整数的平方,求解可以拆分的最小个数2. 分析我刚开始想到的是,用递归取求解,然而,时间超限,不过也很正常。本题所考察的核心是四平方和定理,即任意一个正整数最多可以拆分成4个正整数的平方,如果当前所拆分的正整数n为4的倍数,那么该正整数所分解结果的个数与n/4的结果一样,很容易证明,例如(a^2 + b^2 + c^2) = n,则 4n = ...原创 2019-11-20 20:41:48 · 286 阅读 · 0 评论 -
Basic Calculator II
1. 解析题目大意,从运算操作字符串中计算最终的结果2. 分析要考虑以下几个问题即可:①运算符的优先级:'*'和'/'的优先级最高② 计算结果的存储:依次压入栈中③何时进行计算:当出现优先级低的时候进行运算class Solution {public: int calculate(string s) { stack<int> ...原创 2019-11-14 17:05:45 · 112 阅读 · 0 评论 -
Contains Duplicate III
1. 解析题目大意,|| i - j || <= k 且|| nums[i| -nums[j| || 是否存在数组当中,i和j是数组的索引2. 分析比较容易想到的解法是二重循环暴力破解,但会重复检测,所以时间会超时。所以我们可以借用hashtable结构存储之前检测过的状态,设置移动指针i和起始指针j,i和j之间的间距不能超过k,即hashtable只需存储k个元素就...原创 2019-11-12 17:31:45 · 139 阅读 · 0 评论 -
Implement Trie (Prefix Tree)
1. 解析主要考察字典树结构,类似于Word Ladderstruct TrieNode{ TrieNode* allNode[26]; bool isWord; TrieNode() : isWord(false){ for (int i = 0; i < 26; ++i){ allNode[i] = NULL...原创 2019-11-08 19:58:31 · 115 阅读 · 0 评论 -
Fraction to Recurring Decimal
Example 3:Input: numerator = 2, denominator = 3Output: "0.(6)"1. 解析题目大意,将分数转换为循环小数,不是很难,关键点就在于如何查找循环的部分2. 分析任何有理数都将分为两部分,整数部分和小数部分,故可以将分数分开进行处理1) 求解整数部分,若当前分子numerator整除分母denominator,...原创 2019-11-05 16:12:42 · 146 阅读 · 0 评论 -
LRU Cache
1 解析LRU(最近最少使用)是操作系统内存页面置换的一种技术1.1 题目大意①当内存满时,将最近最少使用的元素置换出去②最近使用的元素(get和put函数调用的元素),优先级最高1.2 题目分析为了调整当前内存中元素的优先级,可以设计类似于队列的形式,优先级高的(最近使用)放在最前面,优先级低的(最近未使用的)放在后面,当需要置换时,将优先级低的元素(最后面)置...原创 2019-10-31 17:16:13 · 105 阅读 · 0 评论 -
Gas Station
解析:比较容易想到的一种解法1.从所有加油站里面选择一个可以到达下一个地点的加油站作为起点2.从起点出发,依次计算到达每个加油站所剩余的油量,若中间出现剩余油量小于0,则无法到达,重新选择下一个加油站;反之,输出起点class Solution {public: int canCompleteCircuit(vector<int>& gas, vector&...原创 2019-10-28 17:01:07 · 246 阅读 · 0 评论 -
Multiply Strings
解析:本题大整数乘法,难点在于连续进位的处理第一种解法:例如123×456,根据乘法的运算,得知3×6的起始数位是个位,而2×6的起始数位为十位,1×6的起始数位百位,观察发现,若用i表示123的索引,j表示456的索引,则当前两个数相乘的结果的当前数位为(i+j)连续进位的处理,由于这里使用字符表示当前的结果,则出现结果大于或等于10,就要进位,由于采用单个字符只能表示0-9的数字,...原创 2019-10-17 19:09:58 · 169 阅读 · 0 评论 -
Integer to Roman
解析:以个位数来分析,每个数位的表示都可以表示为4种情况1.小于或等于3:则 I,II,III2.等于4:IV3.大于4,同时小于或等于8:VI,VII,VIII4.等于9:IX先制作进制数位表,针对不同进制位上的数依次调用即可class Solution {public: string intToRoman(int num) { string result...原创 2019-10-11 19:34:06 · 159 阅读 · 0 评论 -
Container With Most Water
解析:1.将边缘两边设为当前面积最大的区域2.采用两头往中间夹的原理,由于往中间移动的过程中,矩形区域的宽在不断的缩小,当且仅当比之前最大区域的高度更高,才有可能比当前最大区域的面积大,从两边挑选出最大的高度,往中间移动,直到寻找到比之前最大区域高度更高的位置class Solution {public: int maxArea(vector<int>& he...原创 2019-10-11 19:12:49 · 113 阅读 · 0 评论 -
String to Integer (atoi)
解析:1.先处理字符串开头空格的问题2.标记+/-号3.处理超过整形表示范围的数据: 当字符串检测到大于或者等于214748365,若字符串还没有检测完,则超过边界;如果214748364,只需要继续检测最后一位是否超过边界即可class Solution {public: int myAtoi(string str) { int num = 0; ...原创 2019-10-11 18:48:51 · 83 阅读 · 0 评论