
模拟[找规律]
Czy_whlg
不忘本心!
展开
-
Counting Bits
1. 解析题目大意,求解[0, n]内每个数字二进制表示的'1'个数的总和2. 分析比较容易想到的解法是,遍历[0, n],对于每个数字都表示成32位二进制,然后对每一位进行单独的统计。但题目明确要求O(n)的时间复杂度,上述方法不可行。如果仔细观察就可以发现。例如:n = 72 = , 3 = + 1, 4 = , 5 = + 1, 6 = + 2, 7 = +...原创 2019-12-06 19:46:33 · 90 阅读 · 0 评论 -
Array Nesting
1.解析题目大意,给定数组,找出长度最长的嵌套数组。2.分析我最初想到的解法是,从每一个数组的下标作为起点,从该起点开始寻找嵌套数组,利用hashtable存储中间遍历过的元素,如果该元素出现过,说明已经是嵌套数组,该解法时间复杂度为O()class Solution {public: int arrayNesting(vector<int>&a...原创 2020-02-21 22:15:10 · 173 阅读 · 0 评论 -
Optimal Division
1.解析题目大意,通过添加括号调整除法运算的优先级,返回该除法的字符串。2.分析题目很长,但还是比较简单的。主要涉及到一个数学知识点:a / b = c,c要达到最大值,只需保证,a越大,b越小即可。对于(a / b / c / d / e / f)来说,可以将(b / c / d / e / f)看做一个整体,商要达到最大值,(b / c / d / e / f)的值要达到...原创 2020-02-19 11:28:12 · 183 阅读 · 0 评论 -
Magical String
class Solution {public: int magicalString(int n) { string str = "122"; int i = 2; while (str.length() < n){ str += string(str[i++]-'0', str.back() ^ 3);...原创 2020-02-14 20:19:58 · 178 阅读 · 0 评论 -
Total Hamming Distance
class Solution {public: int totalHammingDistance(vector<int>& nums) { int res = 0, n = nums.size(); for (int i = 0; i < 32; ++i){ int cnt = 0; ...原创 2020-02-14 18:17:57 · 295 阅读 · 0 评论 -
Magical String
1. 解析实话说,这道题表达的意思晦涩难懂,琢磨半天才搞懂题意。其实,整体上来说,就是找出上述字符串生成的规律,然后统计该字符串前N个长度的子串中'1'出现的次数。2. 分析参考@Grandyang博主的思路。该字符串由连续的'1'或'2'串联组成,'1'和'2'是相互间隔生成的。具体每个'1'和'2'每次出现的次数就是我们要找出的规律。规律是从第3个数字开始的例如:1 22...原创 2020-01-05 11:14:41 · 220 阅读 · 0 评论 -
Unique Substrings in Wraparound String
1. 解析题目大意,在由无限多个"abcdefghijklmnopqrstuvwxyz"子串组成的字符串s中,在字符串p中查找s的子串。2. 分析我们最容易想到的解法无非是用暴力求解,先划分子序列,然后根据划分的子序列再具体划分,但这种方法的时间复杂度为。参考@Grandyang的博客,实际上这题本身是一道模拟题,不过这个规律确实难找了一点。例如. 以d结尾的字符串分别为...原创 2019-12-30 19:45:48 · 191 阅读 · 0 评论 -
Find All Duplicates in an Array
1. 解析题目大意,求解数组当中重复的元素。2. 分析如果没有要求O(1)的空间复杂度和O(n)的时间复杂度,这就是一道特别简单的题了。在要求的情况下,我没想出来~参考了@Grandyang的思路,其实本质上就是一道模拟题。由于要求数组的元素范围在[1, n],在元素没有重复且每个元素出现在对应的位置上的情况下,数组中的序列应该是A = [1, 2, 3, 4, 5, 6, 7...原创 2019-12-24 19:49:57 · 265 阅读 · 1 评论 -
Elimination Game
1. 解析题目大意,按照以下规则删除[1, n]范围内的元素,直到剩下1个:①从左——>右,然后右——>左,依次重复②每次隔一个间隔删除2. 分析我想到的解法:根据题目所给定的规则进行筛选。利用两个数组,nums存储[1, n],刚开始左——>右,temp保存经过删除后剩下的元素,然后将其反转,这样就会变成右——>左,依次迭代执行,直到剩下一个元素...原创 2019-12-17 19:52:26 · 286 阅读 · 0 评论 -
Nth Digit
1. 解析题目大意,在[1, n]范围内求第n个数字2. 分析这题本质上也是一道规律题。1位数:1-9,9个数字2位数:10-99,共2*90 = 180个数字3位数:100-999,共3*900 = 270个数字....从以上可以推出n位数共个数字所以我们可以通过给定的n,定位到第n个数字是几位数,然后再定位具体的数即可。例如,n = 1111 ...原创 2019-12-16 19:11:34 · 152 阅读 · 0 评论 -
Arithmetic Slices
1. 解析题目大意,计算满足以下条件的子序列个数:①子序列连续且至少有3个元素②子序列相邻两个元素之间的间距相等(即等差序列)2. 分析整体上这道题并不是很难,只是需要我们找一下规律。例如:[1, 2, 3, 5, 7, 9, 11]很容易看出存在两个等差序列:1, 2, 3 间距为13, 5, 7, 9, 11 间距为2对于n个元素的...原创 2019-12-16 17:20:20 · 218 阅读 · 1 评论 -
Rotate Function
1. 解析题目大意,将数组中的元素进行旋转,对应每个位置都会有一个对应的权重,求解当前元素与对应权重乘积之和的最大值2. 分析我想到的解法比较直观,根据题目意思,每旋转一次,计算相对应的和,然后更新最大值。时间复杂度为O()class Solution {public: int maxRotateFunction(vector<int>& A) ...原创 2019-12-12 17:31:53 · 168 阅读 · 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 评论 -
Bulb Switcher
1. 解析题目大意,给定n栈灯,初始状态为off(关),第i次将序号为i的倍数的灯的状态反转(即若当前为off则置为on,当前为on置为off),求解经过n次后,状态为on的灯的数量2. 分析很容易想到的解法就是,利用二层循环,第一层的i表示当前的次数,第二层j代表 i 的倍数,每一次循环,将序号为i*j的灯状态反转即可,最后统计当前状态为on的灯的数量.这种方法的时...原创 2019-11-26 19:01:07 · 173 阅读 · 0 评论 -
Search a 2D Matrix II
1. 解析题目大意,在二维数组里面查找元素,该二维数组行有序和列有序2. 分析我刚开始想到的是,先将二维数组转成有序的一维数组,然后在利用二分查找进行求解,但很不幸,超时!实际上,行有序和列有序就是这道题隐藏的一个重要的特征,进行观察,就会发现,左下角(18)往上是递减的,而往右是递增的,我们就可以从该位置开始查找,若当前元素大于目标值target,那么就往上移动一个位置(往上是...原创 2019-11-18 17:28:24 · 193 阅读 · 0 评论 -
Bitwise AND of Numbers Range
1. 解析题意,在[m, n]的范围内求位与,题目不难,关键是找出规律2. 解析我采用了一种本方法,没有利用规律.在一定范围内求所有数的位与,与运算我们都知道,当且仅当都为1时,结果为1,观察就可以发现,在[m, n]内求所有数的与取决于最小值m的位数,例如m=5,二进制为101,那么当最大值超过1000(8)之后,后面的计算就没有意义了,所以就可以将最小值m所表示位数的最大值替代...原创 2019-11-07 17:32:48 · 137 阅读 · 0 评论 -
Simplify Path
解析:这道题不是很难,主要是把情况分清楚就行,也是一道模拟题所给的示例当中,少了一种比较关键的,即当’.'连续出现3次或3次以上,就表示文件名,例:/head/…/ 输出:/head/…’/'作为分隔符,无非出现以下3种情况:“.” 表示当前路径"…"表示上层路径文件名故我们只需遍历到’/'时,直接continue就行,其他情况保存在director当中,对director 进行...原创 2019-10-16 19:10:15 · 100 阅读 · 0 评论 -
ZigZag Conversion
解析:题目意思有点绕,大致意思,"之"字型输入字符串,然后按行输出字符串观察发现,实际上就是模拟题,规律比较难找。比较通俗的做法,利用二维数组存储该结构,第一列,实则就是每一行元素的首元素,接下去就是numrows-2至1行的元素,依次重复,即1: P A Y P A L2: I S H I R I3: N Gclass Solution {pu...原创 2019-10-15 18:22:49 · 112 阅读 · 0 评论 -
Gray Code
参考大神的解法:利用镜面对称,结合迭代和位运算,整个处理太奇妙了,尤其是这步res[j] | (1 << i)。如下图class Solution {public: vector<int> grayCode(int n) { vector<int> res(1); for (int i = 0; ...原创 2019-10-12 11:58:52 · 112 阅读 · 0 评论