自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 354. Russian Doll Envelopes 俄罗斯套娃

这个题目,很纠结。。。我不管咋优化都无法优化都无法过测试。提示超时。。。。先把思路说一下把!。第一排序,先按照高度排序,然后剩下的就是宽度了。再按照leetcode300的算法,固定i后就从0到i-1 去找那个能让dp[j]+1 最大的序列。当然条件就是dp[i][0] > dp[j][0] && dp[i][1] > dp[j][1] 这样俄罗斯套信封才能装进去。找到后就再遍历下dp的数值,找最大的那个dp数值。就是答案了。看上去不难。难的是

2022-05-10 02:54:23 174

原创 368. Largest Divisible Subset

这道题目是二刷了,还是没有印象。总结不到位导致的问题出现。这道题目和之前的354. Russian Doll Envelopes 俄罗斯套娃,leetcode 300 一样的题型。属于接龙问题。思路也是相似的,固定好i 以后,遍历j从0到i-1.然后寻找dp[j]+1的最大值。并且用prev数组去记录前序节点。代码如下:class Solution {public: vector<int> largestDivisibleSubset(vec..

2022-05-04 08:34:24 217

原创 最长上升子序列

Logest Increasing SubsequenceLongest increasing subarray我到现在还是不明白,subsequence和sebarray 到底那个是连续的。那个不连续。如果是连续的,双向指针就能解决。但是不连续的,就得是leetcode 300了。300. Longest Increasing Subsequence做法有两种,一种DP。dp 代表到当前index位置的 最大LIS从当前index 位置之前开始搜索比如j < in

2022-05-04 04:54:38 143

原创 区间型动态规划

区间型动态规划,比较难但是考的次数也多的一种。具体的就是在区间上找答案。而这种要做的话一般都是二维数组来建造DP。而区间型动态规划最难想的就是动态规划递推方程。312.Burst Balloons 就是这样的题目。https://www.youtube.com/watch?v=z3hu2Be92UAg看了这么多解法,只有这个最好。...

2022-05-02 10:07:33 217

原创 merge intervals

56. Merge Intervals57. Insert Interval这两道题目都是典型的intervals题目。本来以为这种题目都一样,后来发现完全不是。56, 57 这两道题题目是merge overlap成一个新的区间。最经典的是merge 这个。每次merge都要和最后一个元素做比较。根据是如果和最后一个元素没有overlap,就直接push 当前的区间进入结果队列。如果在这个区间,就更新区间的右边界。 为啥左边界不更新?因为1. 肯定有overlap,

2022-05-01 12:28:34 229

原创 leetcode 23. Merge k Sorted Lists

这道题目就是注明的K sort问题。和彩虹排序一样,出自名门。常考题目。既然是k sort merge, 就能用典型的merge 算法。 于是就有了一下几个办法1. 两两merge成一个链表,然后再重复这个过程。直到就一个链表。 while(lists.size() >1){ vector<ListNode*> newLists; int size = lists.size(); for(i...

2022-04-30 10:17:12 169

原创 155. Min Stack

实现最小栈的问题。最简单的思想是用两个栈来做。一个存当前的数值,另外一个存储的是当前数值之前的最小数值。每个数都对应一个当前数值之前的最小数。那么就能实现最小stack的问题了。比如: 3 5 2 1stack: 3 1 5 9minStack:3 1 1 1如何优化那?上面的例子里minStack 存了多个1我们可以不存这么多,只存一个1.如果当要pop stack的元素是1的时候再pop minStack的1。但是有个特例比如 ...

2022-04-30 00:04:10 117

原创 二分法-答案里找结果,和矩阵里找结果

以前做过的在答案里寻找双指针的算法还是没有想到。不知道为啥看到题目想不出来解法。lint code 437 · Copy Books典型的单案例找结果。需要的时间是结果,范围从0到INT_MAX在这里面用二分,通过mid的需要是时间可以算出来需要多少人。然后和 题目给定的人数做比较。这样二分。答案写出来了好久,但是一直没有调试通过。原因是我sb的去拍了个序给每一本书需要的时间。画蛇添足了一笔还没有得到想要的结果。 SBSBSB在矩阵里找结果,向ht

2022-04-27 04:16:54 153

原创 同向双指针解决最长substring, subarray问题

424. Longest Repeating Character ReplacementLongest Substring with At Most K Distinct CharactersMax Consecutive Ones IIIMax Consecutive Ones IIMaximize the Confusion of an ExamLongest Substring with At Most Two Distinct Charactersleetcode这6道题

2022-04-26 07:39:51 76

原创 单调栈的应用-最大最小数值。

单调栈,顾名思义就是栈里面都是单调的。用途是啥?用途是用来找下一个最大或者最小,前一个最大,最小。比如经典题,找下一个最大的数。{4, 3, 2, 1, 9}在遇到就之前,栈里面的元素是递减的。当遇到9以后,1比9小。于是1的下一个最的就是9同时出栈。然后下一个数是2, 比9小。然后2的下一个最大就是9.知道栈空或者有个比9大的数在栈里。然后把9push进去,维护一个递减的栈。https://leetcode.com/problems/next

2022-04-25 11:37:57 185

原创 同向双指针移除重复元素

leetcode 26. Remove Duplicates from Sorted Arrayleetcode 27. Remove Element这两道题目是同样的题目。解决办法也是用双指针。重要的事情说三遍,排序排序排序看看是不是有对解决问题有改善。然后既然是双指针,就得向用同向还是双向。对于移除重复元素,以及之前的subarray等。都是要用同向。因为重复元素一个指针指向头,一个指向尾部。头部要向尾部靠拢。subarray也是一样。subarray中第一个不是

2022-04-25 04:55:10 202

原创 同向双指针

lintcode 1870 · Number of Substrings with All Zeroeslintcode610 · Two Sum - Difference equals to targetleetcode 1759. Count Number of Homogenous Substringsleetcode 1513. Number of Substrings With Only 1s这四道题目的思路和代码相似。都是用的双指针。为何用双指针那?首先, 这三套题.

2022-04-25 03:12:03 252

原创 329. Longest Increasing Path in a Matrix

这道题目让我觉得算法,特别是google的算法是真的难。难于上青天。给了一个二维数组,求最长增长子序列。初看这个问题数组是无序的,最长子序列是有序。但是是目标,和如何解决这个问题没有啥关系。既然觉得没有关系,那么就创造关系。排序,绑定坐标后按照数值排序。 for(int i = 0; i<row; i++){ for(int j = 0; j<col; j++) { myvector.push_back...

2022-04-24 08:56:31 131

原创 DP 处理LIS问题

673. Number of Longest Increasing Subsequence300. Longest Increasing Subsequence这两道题目基本一样。Leetcode 300 题目是最基本的DP算法。Leetcode 673是300题的延伸。首先第三百题, 给了一个数组,数值任意。给出最长的增长子序列。当然最先想到的是DFS,把所有的子序列都找到。然后看是不是增长的。第二个想法就是DP。题目给了两个条件: 有序: LSI是递增。 第二个,求的是最

2022-04-24 03:47:36 319

原创 1011. Capacity To Ship Packages Within D Days

这道题目是考虑的最多的一个。因为牵扯到最后一箱子该咋发的问题。题意: 传送带上有N个包裹(包裹顺序是没有办法调整的), 要通过海运运出去。给了要在多少天之内全部送出去。求运的船的大小。我的天哪,这难道是个船运公司出的题目吗?画图画图画图 capacity/ship 1 2 3 4 5 6 7 8 weights 1 1 1 ...

2022-04-06 02:22:07 149

原创 1760. Minimum Limit of Balls in a Bag

画图画图画图 重要的事情说三遍 //max No. balls/bag 1 2 3 4 //balls in bag 2 1 0 0 0 4 3 1 1 0 ...

2022-04-06 00:49:26 287

原创 2064. Minimized Maximum of Products Distributed to Any Store

这道题目和之前的砍树, koko吃香蕉题目一样。在答案里二分。我现在还没有总结出来什么样子的题目可以用二分查找。但是基本的好像都是这样:数组, 一个target。 然后计算某个元素。比如target 6, 数组给了。求3. 而这个3是从1~100000里找出来的。并且这个3 可以通过数组计算出6.Input: n = 6, quantities = [11,6]Output: 3废话少说,先画图表min. max NO. products 1 2 ...

2022-04-05 23:59:12 146

原创 2226. Maximum Candies Allocated to K Children

//题目和砍木头和875 koko吃香蕉一样 //画图画图画图 重要的事情说三遍 // max NO. candies/pile //candies 1 2 3 4 5 6 7 8 // 5 5 2 1 1 1 0 0 0 // 8 8 4 2 2 1 1 1 1 ...

2022-04-05 02:54:22 156

原创 leetcode 875. Koko Eating Bananas

题意: KoKo(知名大猩猩可可(Koko),出题的作者肯定比较热爱大猩猩)喜欢吃香蕉。桌子上有好几把香蕉,每一把有piles[i]根香蕉。 管理员会离开H 小时,然后KoKo就要在这H小时内偷吃香蕉。KoKo要在管理员离开的H小时内把所有的香蕉吃完,就得有个吃的速度K。并且KoKo也不想吃的太快。问题就是求出来这个吃的速度K。保证既能吃完,吃的速度也慢。大家看完题目一头雾水。重要的事情说三遍: 画图表,画图表, 画图表 。bananas/piles 吃的速度K...

2022-04-05 01:00:25 445

原创 leetcode 双指针算法

这两周刷了双指针算法的一些题目,列表如下:4Sum4SumII3Sum ClosestTwo Sum II - Input Array Is Sorted3Sum SmallerValid Triangle Number3Sum核心思路都是用两个指针指向左右两端,然后往中间不停的靠近。直到指针相遇。模板如下:while(left < right){if()left++;else ifright--;else{left++;ri

2022-03-31 00:15:36 1040

原创 5. Longest Palindromic Substring

class Solution {public: string getPalindronme(int start,int end,string s) { while(start >=0 && end < s.length() && s[start] == s[end]) { start--; end++; } ...

2022-03-18 04:28:21 316

原创 leetcode Mar 1st week

上周刷了括号匹配的问题,这周开始刷排列。谈到排列,那算法就没得选。DFS。比如给了一组数{1, 2, 3},让找出所有的排列。那大家的思路一定是1. 先把各个元素作为新的排列的第一个元素:{1}{2}{3}2. 然后每个排列中再依次把没有访问的数字插进去{1,2}{1, 3}{2, 1}{2, 3}{3, 1}{3, 2}3. 重复第二步直到每个排列的长度等于3.所以DFS来做就是基本的解法。框架如下:DFS(resul

2022-03-05 00:32:38 113

原创 leetcode 刷题总结2月第四周

本周在大神的指点下刷了以下题目678. Valid Parenthesis String1475. Final Prices With a Special Discount in a Shop2116. Check if a Parentheses String Can Be Valid921. Minimum Add to Make Parentheses Valid1963. Minimum Number of Swaps to Make the String Balanced1

2022-02-27 10:22:35 138

原创 1197. Minimum Knight Moves

题目是给一个欧洲的棋盘,黑骑士的位置在(0,0)。给定了8个制定的方向,和目标位置。求最少多少步可以到达目标位置。棋盘的范围是无限的。刚刚开始觉得这道题目不难,典型的BFS,然后for 循环8个方向拿到新的位置。然后再继续BFS新的位置。但是这样做下去会超时。那么就得优化了。1. 目标坐标是可以在4个坐标象限里的任意一个。 我们可以把目标左边转换成在第一象限。这样得到的结果一样。2. 既然限制在第一象限,那从当前点沿着8个指定方向到达后的位置,是否要过滤下或者限制下。有些到达

2022-02-18 03:50:54 347

原创 1992. Find All Groups of Farmland

这道题给出了所有的1组成的形状是四边形,让给出每个农田/陆地 的左上角和右下角的坐标。这道题目还是千篇一路的bfs来遍历每个点,最鸡贼的如何判断当前点是右下角的点。1. 正下方和右侧的点都是森林、海洋2. 当前点在边界。if((newy == col -1 || land[newx][newy+1] == 0) && ((newx == row -1) || land[newx+1][newy] == 0))这个鸡贼的地方不难理解。处理完这个就能进行其他的了。代码

2022-02-17 10:21:01 444

原创 694. Number of Distinct Islands

发现这些题目还是套路深啊!完全不适合我这种不长脑子的人。题目要求的是不一样的陆地,形状不同,面积不同等。那怎么去确定不同那?当确定了开始点后,下一步就是遍历四周是不是陆地。那遍历四周都是变换x,y的左边。比如上下左右的顺序。可以把这点陆地的位置相对于起始点的位置的相对位置记录下。然后把这些形状push到unorder_set里。 同样的set就会被hash掉。class Solution {public: vector<pair<int, int>&gt...

2022-02-17 03:34:05 284

原创 leetcode 310. Minimum Height Trees

题目是给了一个图,求把某个节点提起来后,形成的树的高度最小。第一个想法就是暴力搜索。把每个点提起来,然后计算并对比树的高度。结果就是超时。优化了一些,发现还是没有办法在规定时间内处理完。看了网上的大神huifeng guan和残酷刷题群之前的解法,觉得自己太low了。既然题目要求提起某个节点后树的高度最小,问题转换下就是某个节点提起来后到其余的每个节点的距离最短。我的高中的楼布局就是和这道题的图差不多,高一在北美的楼,高二,高三...

2022-02-14 01:47:16 196

原创 leetcode bfs 刷题总结

这段时间一直没有写刷题总结,因为发现BFS来处理问题会有些吃力。从基础讲起,BFS(breath first search)宽度优先搜索。就是一层层的去遍历。BFS的几个主要应用的地方:1. 树的按层次遍历。2. 图的按层次遍历。、3. 数组按层次遍历。对于这三个不同的应用,大概说一下解题的框架(大概思路)1. 对于要按照层次遍历的问题,这个比较简单一些。a. 树中上一层节点和下一层节点之间是有向的,比如父亲节点会指向孩子节点。...

2022-02-13 11:32:18 342

原创 leetcode deepclone

1485. Clone Binary Tree With Random Pointer1490. Clone N-ary Tree138. Copy List with Random Pointer133. Clone Graph今天连续刷了几道和deep clone有关的题目。总结下这类题目的通用解题方法。1. 遍历每个node,同时new 出新的node。 把original node 和 cloned Node 通过 unorder_map 绑定起来。2. 遍历完所有的or

2022-02-06 09:14:48 381

原创 323. Number of Connected Components in an Undirected Graph

寻找多少个独立的图,那不就是遍历完一个图,然后遍历其他图吗? 直到所有的点都遍历完。 创建两个unordered_set, 一个记录访问过的,一个记录没有访问过的点。 遍历每个图的节点的时候,动态的更新这两个set。当第一个独立的图遍历完后 ret++;如果记录没有访问过的点不为空,那么就继续循环去遍历。这个办法可以,但是效率低。class Solution {public: unordered_map<int, vector<int>> bu...

2022-02-05 00:54:51 481

原创 leetcode 841. Keys and Rooms

题目意思是给了一个二维数组,比如[[1],[2],[3],[]]数组[0]代表房间0里放的某个房间i的钥匙,比如房间0里放的房间1的钥匙。然后通过房间0里的钥匙去打开房间1,然后继续去拿钥匙。该问题和密室逃脱一样或者以前的RPG单机游戏仙剑一样,打通某个任务才能解锁另外一个任务。求能不能访问所有的房间。读完题目第一个想法就是这个题目和图的遍历很想哦。房间0相当于图的顶点vertex,房间0里的钥匙相当于顶点的邻居节点。得到了邻居节点(钥匙)才能访问其他的顶点(房间)。然后最后

2022-02-04 23:49:11 1725

原创 261. Graph Valid Tree

Given an array of stringsstrs, groupthe anagramstogether. You can return the answer inany order.AnAnagramis a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once....

2022-02-04 06:06:28 236

原创 117. Populating Next Right Pointers in Each Node (I)II

117.Populating Next Right Pointers in Each Node IIMedium3365228Add to ListShareGiven a binary treestruct Node { int val; Node *left; Node *right; Node *next;}Populate each next pointer to point to its next right node. If there is no n.

2022-02-03 01:38:01 268

原创 1660. Correct a Binary Tree

You have a binary tree with a small defect. There isexactly oneinvalid node where its right child incorrectly points to another node at thesame depthbut to theinvalid node's right.Given the root of the binary tree with this defect,root, returnthe ...

2022-02-01 01:21:11 274

原创 114. Flatten Binary Tree to Linked List

题目要求前序遍历完后更新指针为linked list问题不难,可以用iterative 按照前序遍历来遍历所有node。然后同时更新指针就好了。代码如下:/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr)...

2022-01-31 01:54:16 81

原创 426. Convert Binary Search Tree to Sorted Doubly Linked List 解题报告

转换binary search tree 为双向链表并返回最小的node为head返回最小的node,岂不是就是中序遍历吗?那这道题目就是中序遍历BST,并把访问的当前node动态更新双向链表的指针。因为双向链表要指向其前序(predecessor),需要把上一次访问的节点记录下来。iterative 代码如下:/*// Definition for a Node.class Node {public: int val; Node* left; Node* ri...

2022-01-29 06:49:46 111

原创 988. Smallest String Starting From Leaf C++

lexicographically smallest string 是这道题目的关键。翻译过来,就是字典序最小。也就是你翻字典的时候的顺序最小。从根到root的所有node拼接的string 就按照递归来做。思路也是divide and conquer。求字典序最小才是这道题的关键,换言之就是实现strcmp函数。strcmp一个个的字符按照字典顺序比较A,B如果A[i] 字符比B[i] 小,那A 的字典序小于B。如果A[i]字符比B[i]大,那A的字典序大于B。如果A[i]字符

2022-01-28 08:18:03 875

原创 1373. Maximum Sum BST in Binary Tree

Given a binary tree root, return the maximum sum of all keys of any sub-tree which is also a Binary Search Tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keysless thanthe node's key. The right subtr..

2022-01-27 07:25:34 102

原创 508. Most Frequent Subtree Sum

题目思路还是一如往常,唯一要考虑的就是怎么存储每个子树的SubTreeSum和频率, 来方便找频率最高的那些subTreeSum。因为每个SubTreeSum和频率是一一对应的,所以map是个好办法。map的key存储subTreeSum, val存储频率。从树底部开始计算每个subTree的sum, 这样就得走一遍每个节点。遍历完所有的节点得到map后,就进行再加工。遍历map里的每个元素,然后检查每个元素的frequency数值。1) frequency如果和max_fr

2022-01-26 00:52:22 4797

原创 Leetcode 129 Sum Root to leaf Numbers

Input: root = [1,2,3]Output: 25Explanation:The root-to-leaf path 1->2 represents the number 12.The root-to-leaf path 1->3 represents the number 13.Therefore, sum = 12 + 13 = 25.题目理解不难, 方法一也很固定。递归遍历整个树的node。并且动态更新number数值。 val*10+root->...

2022-01-25 11:20:00 4490

android start kernel

android start kernel

2013-05-01

空空如也

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

TA关注的人

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