自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Split the Array to Make Coprime Products

prefixProduct and suffixProduct

2023-03-12 07:08:37 112

原创 Search in Rotated Sorted Array II

Search in Rotated Sorted Array II

2023-03-09 04:18:45 72

原创 Put Marbles in Bags

现在来看这道题变成了什么, 不就是找出来最大的k-1个相邻的sum - 最小的k-1个相邻sum. 因为arr[0]和arr[last] 肯定max score和 min score里面的bags都有选, 所以可以直接抵消. 然后这个组合可以算成1对pair, 所以再找k-1个 pair (从0 到 n -1)这个题我乍一看就是用dp, 分段取. 但问题就是用dp就得三维, 因为还有一条k bags的条件. 所以一定会超时. 这个题的解法就真的genuis,这就是我们要找的 score.

2023-02-05 09:10:05 106

原创 Knight Probability in Chessboard

这个题我们要计算k moves之后, knight 还留在board上的概率. 那说白了, 就是我们要计算knight去每个cell 上的概率after k moves 之后.

2023-01-09 10:12:18 122

原创 Race Car

这个题难度真的大. 尤其是dp的答案真的难…比较普遍的思路, 就是BFS. 因为找最短路径嘛. 所以从1开始BFS两种choices. 然后设置level 直到find 到target, 就是最短路径. 然后 time complexity 是 O(Target*log(Target)), 其实是很快的.这个是网上的答案, 不是我写的. 因为我一直在理解Time Complexity, 懒得自己写了.解释一下为什么是O(Target*log(Target)),

2023-01-07 10:21:51 130

原创 Minimum Number of Refueling Stops

这个就有点儿偏greedy了. 就是我们想要行驶的最远加油最少, 肯定是我们不到万不得已不加油, 而且要加也得每次加油最多的station. 那首先要想加油, 我们得先能行驶到station才行. 那我们就可以先往target 走, 然后用一个max heap存每个加油站的油. 走到我们没有用必须得加的时候, 我们每次都先加先前经过的油最多的station. 直到我们走到没油,而且经过的station油都加了.还是到不了下一个加油站或者target,那就代表到不了.用I个refuel最远可以走多远.

2023-01-04 13:51:55 98

原创 Median of Two Sorted Arrays

这个题的思路就在于我们要带进cut的思想, 然后我们要把cut的position也当作一个array的位置, 举个例子. [1,2,3,4] 如果我们要找他的median, 那我们的cut就在2,3中间. 然后cut左侧的num = 2 + cut 右侧的num = 3, 取平均值.[1,2,3,4,5], 我们的cut就cut在3上, 然后因为cut就在梳子上, 所以cut左侧的数字是3, cut右侧的数字也是3, 取平均值还是3.那我们就binary search 直到找到那一个合理的cut就行了.

2023-01-01 10:19:51 62

原创 Find K-th Smallest Pair Distance

每次right + 1. 就是windows+1. 那这个时候如果nums[right+1] - nums[left] 还满足条件, 那我们就计算这个right+1给我们的windows 增加了多少新的pairs就行了. 新组成的pairs就是nums[right+1] 和前面所有的num 一直到nums[left] 的组合. 就是(right+1) - left 个新增的pair. 那我们就count += right(+1之后的)-left 就好了。那么接下来. nb的方法!

2022-12-26 06:33:36 53

原创 Longest Duplicate Substring (Rolling Hash)

Rolling hash

2022-12-25 09:57:50 122

原创 Find the K-Sum of an Array

然后再下一个是, maxSum - nums[1], 再下一个是 maxSum - nums[0] - nums[1], 再一个, maxSum - nums[2], 然后 maxSum - nums[0] - nums[2], 接着maxSum - nums[3]现在heap里有 (maxSum - nums[0] - nums[1], maxSum - nums[2], maxSum - nums[1] - nums[2])然后还是按照从大到小排序的。

2022-12-25 09:15:45 50

原创 Total Appeal of A String

这个题的找each character contribution 的方法很简单. 我简单举个例子.简单说就是数每个character 出现在几个substring里了.然后数substring的方法就是character 的左边range✖️右边range.(类似montonic stack)像这个题的话, 就不需要montonic stack了, 直接一个loop 走遍每个character。

2022-12-22 14:00:32 79

原创 Minimum Number of Moves to Make Palindrome

这个题的greedy 思路很简易, 就是两个pointer分别指向left 和 right, 然后固定任意一边的char, 遍历整个string 寻找固定那一边一样的char, 如果找到了就对它连续做swap到另外一边, 这样swap之后string的两边端点就一样了, 然后我们就可以把left pointer 和 right pointer 继续往内部移动了. 接着重复相同的操作…如果碰见string 长度是奇数, 那么会出现一个char 是应该在最中心的. 这个char在我们固定left right

2022-12-22 10:17:16 102

原创 Maximum Number of Books You Can Take

就像arr[2] = 4, arr[3] = 8, arr[4] = 6. 就算我们arr[4] 取6, arr[3] 取 5, arr[2] 取4. dp[2] 原先算出来的结果就是假设arr[2] 取4. 所以可以直接dp[4] = dp[2] + 5(arr[3]取值) + 6(arr[4] 取值)dp[3] = dp[2] + 8 = , dp[4] = dp[1] + 4 + 5+ 6 (其实= dp[2] + 5 + 6)

2022-12-20 10:18:33 79

原创 Cheapest Flights Within K Stops

adad

2022-11-08 06:15:25 79

原创 Sum of Subarray Minimums

class Solution { public int sumSubarrayMins(int[] arr) { int MOD = 1000000007; Stack stack = new Stack(); long sumOfMinimums = 0; // building monotonically increasing stack for (int i = 0; i

2022-10-24 06:23:56 136

原创 Number of Submatrices That Sum to Target

Number of Submatrices That Sum to Target

2022-10-20 10:21:46 69

原创 Permutations II

为什么是visited[I-1] == false呢, 因为在我们backtracking中, 但凡visited[i-1] = false了, 就代表此时已经backtrack回来了. 就是所谓的第一个1开始找组合的loop已经结束了. 现在要开始从第二个1找组合了.当我们从第一个1开始找组合的时候, 第二个1还没用过, 也就是说这个时候我们是第一次创造,[1,1,x]的组合。然后针对这个题, 怎么排出duplicate呢, 就是当我们backtrack的时候, 比如说[1,1,2]

2022-09-18 03:23:15 109

原创 1372. Longest ZigZag Path in a Binary Tree

然后因为有可能left/right node 下面是好几个subtree, 所以我们需要继续再用当前的max(left[1],right[0]) 和 Math.max(left[2],right[2])这个global length 去比较一下.因为left是从left node 过来的, left[1] 就是left node 的right node 的最长length, 这个符合zigzig 一左一右的规律.right = 从这个root 往右边走得到的最长zigzig path 的length。

2022-09-09 04:42:51 195

原创 Distribute Coins in Binary Tree

就是return left+right - 1. 为什么要减一呢, 就是我们在算盈余亏欠嘛, 本身node.val = 1代表不亏不盈, 所以我们本身就要-1来得到当前的status. 然后 return left+right呢,就是为了计算当前这个node, 要从他的children里得到什么move. 从而得到这个node 自己的status. 因为这个算完之后,就再也不需要考虑他的children了。比如说上面图里的example就是 root = 3,那么我们想让他最后 = 1, 那它就是盈余2.

2022-09-08 10:38:40 49

原创 Find the Duplicated Number

因为array of num里的每一个num 都是unique 的, 所以每一个index的nesting都对应独特的下一个index, 所以才会形成一个完整的path. 所以如果我们把其中一个num的数值改变成一个duplicated num, 那么就会有两个index 指向同一个node. 就形成了cycle.通过实践和测试, 我发现当一个array是number[1,n]的permutation时, 这个array是不会出现cycle的. 换句话说就是一个完整的path, 到最后sink node..

2022-08-09 01:29:01 192

原创 Array Nesting

然后进一步优化space就是可以直接把nums里所有的visit过的直接改成-1之类的数字. 然后也不需要担心会有其他的num 从别处接入已经visit过的cycle 从而增加cycle的length. 进而需要return一个更大的答案。那么说明我们只要创造一个visit[] array来记录所有visit过的num就行, 因为一个cycle里的num 不管从哪开始,最后都会变成一个cycle. 就可以直接跳过.这样的话,就是说每一个num的nums[num] 其实也都是unique的....

2022-08-07 13:15:55 63

原创 Valid Parenthesis String

我们可以看到cmin和cmax是我们分别定义的最大openingbracket和最小openingbracket的值.一旦cmin最后最后>0,那就说明即使把所有的*都当作")",也还是不够close.那就invalid了.我们每次定义一个最大openingbracket的值,再定义一个最小openingbracket的值。一旦我们的cmin...

2022-08-02 10:37:22 98

原创 Count Binary Substrings

我们可以组成"01"“0011”“000111”(不在乎重复的,所以即使"01"这种string之前可能已经出现过了,我们还可以count它)我们都要比较当前数的char的数量和前一次数的char的数量做比较,然后answer里加min(当前char数量,前一个char数量)首先这个题的s,就一定是"0"和“1"的组合形式,就是说要么是"001”要么"…然后数1,出现了3个"1".那么3个"1"和2个"0".我们可以组成"01"“0011”又是一道需要好好读题的题。...

2022-08-01 07:18:46 211

原创 Longest Uncommon Subsequence II

所以就是说,如果我有一个arrayofString,然后其中有一个string长度是最长的,那么它本身就是longestuncommonsubsequence,因为别的string都没它长,所以这个最长的string不可能是其他任何string的subsequence.就满足了longest和uncommon.那有些同学可能会说了,如果最长的先比较了,那不直接return最长的string不就可以了.不是这样的。这里面把两个duplicate扔掉之后剩下一个"aa"...

2022-08-01 07:03:55 57

原创 Repeated String Match

是因为,如果说B[0]是A[A.length-1]的话,那么A.length刚刚比B长一点儿,是不够用的.不能保证B是substringofA并且还能检测到。首先我们知道,如果想构建出b是a的substring,那么至少a.length>=b.length.因为code除法都是向下取整,所以+1可以保证a.length至少比b.length长.然后呢,我们就首先会addb.length/a.length+1个copy....

2022-07-30 07:25:41 67

原创 Unique Binary Search Trees II

Subsets dfs

2022-07-16 08:33:08 105

原创 Meeting Rooms II

这道题呢,是meeting room的变形,难点在于 我们不太容易确认当两个meeting产生conflict的时候, 是否前一个meeting已经结束了, 如果结束了, 就不需要再追加新的room, 如果没结束就得再增加一个meeting room.此时我们的想法就应该是, 运用一个heap 存储正在进行的meeting, 然后每次当要加入下一个meeting的时候, 运用heap的性质,判断heap里结束最早的meeting是否 在下一个要加入的meeting 开始之前已经结束, 如果是, 那么就可以

2022-07-04 06:48:09 210

原创 Subarray Product Less Than K

Subarray Product Less Than K

2022-06-30 10:10:17 112

原创 Max Consecutive Ones III

Max Consecutive Ones III

2022-06-29 04:55:10 84

原创 Linked List Random Node

Linked List Random NodeQuestion:思路:这道题乍一看, 挺简单的. 没什么难度, 确实,但这题主要是一个解法非常smart.so: generally 3种解法.前两种不必多说了, 说一下这个第三种解法: reservoir sampling.这是一个很牛逼的算法。 讲的是如何从infintine number 的data中 随机抽取一个数.就前提条件是这个 array of number的长度我们是未知的。就是说不知道有多少个数字, 所以在这种情况下. 如果

2022-05-27 11:50:06 122

原创 Flatten Binary Tree to Linked List

Flatten Binary Tree to Linked ListQuestion:思路:这个题考的不是让我们创造一个新的LinkList, 所以不能按照做prev traversal tree的思路做recursion 来创建linklist.这道题是把given 的tree 结构转变成linklist所以呢,这个题考查的是prev traversal tree 和 link list的关系。看 example1, 我们会发现, 根据pre-traversal tree 的原理, 左边最大

2022-05-24 09:50:25 74

原创 Intersection of Two Linked Lists

Intersection of Two Linked ListsQuestion:思路:这个解题思路, 也是非常的smart, smart.double pointer的解题思路, 这个题也是运用了一个数学公式:x + y = y + x;什么意思呢就是我们想象两个pointer都要把两个linklist走一遍那么pointer 1 先走了 link list x, pointer2 先走了y当pointer1 走完x 之后立刻走y, 反之pointer2 走完y 之后再立刻走x.那么

2022-05-24 06:22:24 146

原创 Linked List Cycle II

Linked List Cycle IIQuestion:思路:这道题的一个解法真的很聪明!首先非常常规的做法, 存每一个node 的地址去set里, 然后当有重复的自然就是cycle 的 start.但是这样写, 虽然只走了一遍, 但是经过测试, 速度还是很慢.所以此时第二个思路就非常聪明. 利用数学的思维首先,这个思路起头还是传统的double pointer 解法,fast 和 slow.然后当fast 遇上 slow的时候, 我们此时可以写一个数学公式define x = the

2022-05-23 10:53:29 176

原创 Reverse Nodes in k-Group

Reverse Nodes in k-GroupQuestion:思路:又是一道很好的题, reverse link list的 hard 变形. 做完这个题感觉reverse link list的题型就能参透了这道题呢要求根据给定的k值,来决定每隔几个node来一次reverse.我一开始尝试运用一堆pointers, 做一个大while loop. 但是浪费很了很多时间, 最后也没能做出来. 原因之一是, 我没法在下一回合while loop 的时候仍然保存上一轮的head.所以后来我放弃

2022-05-23 04:03:01 132

原创 LRU Cache

LRU CacheQuestion:思路:这道题呢, 其实难点就在这个他要求put 和 get 都是O(1), 因为其实如果没有效率的要求, 那这个题就随随便便套用一个unordered_map, 然后胡乱更新就完了.但他要求了要O(1), 所以说就是我们还要想一个方法,实时track 这个least recently used key.一个比较直观的方法就是, 我们设置一个container, 然后每次运用到一个key,就把这个key 推到container的最前方, 每次当put需要evic

2022-05-19 13:17:54 51

空空如也

空空如也

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

TA关注的人

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