leetcode
文章平均质量分 61
DrawnBreak
这个作者很懒,什么都没留下…
展开
-
每天1个算法小技巧——绝对值动态规划问题
大段整理算法太累了,但是有任务需要我这么做,只好每天写一点,后面再合并好了。涉及 绝对值的最大值问题, 或者涉及 某某距离绝对值 和另一个值做相加的总和最大值之类的问题, 要学会把绝对值拆开来, 推导出一个你可以用来做动态规划的式子。先不考虑题目内容, 直接看下面的解法,没拆开前,必须遍历m次,才能得到max。 他把绝对值拆开后,得到了一个O(1)即可确定的结果。题目来源:5815. 扣分后的最大得分...原创 2021-07-18 23:23:14 · 392 阅读 · 1 评论 -
第 230 场周赛记录(283 / 3727)
前面3题中规中矩, 思路不难,就是代码写得有点慢,被猫吵得有点烦。第四题,思路想出来了,但是运行程序时各种出错。比赛结束后重写了以下竟然就对了,看来还是太急了。以后可以加个技巧:每次把思路用文字写在注释里,这样也可以提前考虑一些边界条件,不要怕时间不够,就怕写错代码。如果动态得计算每次的情况会很麻烦。当 2俩车(高速a和慢速b)合并后,那在后面的跟车(如果速度快都)其实一开始就在追逐慢速b,那么相遇时间就是和慢速b的时间, 不用考虑a了。那么就想到了贪心,每次选相遇时间最短的出队,此.原创 2021-03-01 01:18:46 · 159 阅读 · 0 评论 -
第 229 场周赛记录(460 / 3483 )
前2题太水了忽略。结果第三题卡了1个半小时解决,差点连前500都木有了这题很容易让人想到dp,但是10^3的限制让人没办法弄二维dp数组去确认每个区间的最大结果。这里犯了错误,像这种有严格限制的提示, 区间[a,b]是肯定没那么简单,必须要我全部求出来才行。这里因为只能开头或者末尾处删除, 当我之前选择删除了k个时,末尾或者开头的数量则是有限制的,想到这点就能解了。还有就是二维dp转1维dp,如果某维度每次只会+1或者-1,则可以去掉,每次复用和更新上一次的维度。 public int.原创 2021-03-01 01:11:20 · 135 阅读 · 0 评论 -
第 46 场双周赛记录(119 / 1647)
懒得总结题目了。记一下需要注意的地方:对于简单题,数量范围都在暴力范围内,这时候就考验代码能力,能否迅速写正确。 第一题我花了18分钟是因为对大小写的转换方法用得不对。第二题好像是个逻辑题,也不用算法。第三题,bfs应用,思路不难,但是花了20分钟,有一般用在确认可行性上了。 还有优先队列的比较方法总是记不清: 记住默认是小顶堆,即对数组做sort后的第一个元素默认是最小的一样。公约数应用以及树的dfs遍历题。正常思路会超时, 但只要想到怎么利用父亲节点传下来的信息,具体忘了。.原创 2021-03-01 01:03:40 · 137 阅读 · 0 评论 -
第 228 场周赛记录(490 / 2483)
第一题(3分钟):这题其实还是慢了, 应该1分钟能搞定, 因为数据量很小,所以可以直接考虑2个for循环验证0101 和1010这2种情况的数量, 都不用再去做什么推断之类的。。第二题(10分钟,对xxxx里包含多少个x组合计算错误)这题也很简单, 其实只要知道一个 aaaa里包含多少个同构字符串即可当时竟然算错了。。应该直接用土方法算1个简单的aaaa里包含多少个,算出来就可以4个a加上3个aa加上2个aaa加上1个aaaa, 等于4+3+2+1=10后面都好办了,按理应该5分钟搞定.原创 2021-02-14 23:03:23 · 174 阅读 · 0 评论 -
第 45 场力扣双周赛对战记录(530 / 1676)
该博客纯粹用于自我分析和总结不足点, 没啥用,大家不用太关注。最后一题在比赛结束后15分钟才写正确。第一题没什么好讲的,忽略。第二题(30分钟,连续子数组和做法记忆不深刻):这不就是连续子数组最大和吗?只不过换成了和的最大绝对值。。然后我写了30分钟,直接血崩。。。原先的连续子数组最大和做法是这样的:sum[i]代表从i位置向后的最大连续子数组和则sum[i] = Math.max(num[i] + sum[i+1], num[i+1])即要么把自己和后面拼起来,要么就不和后面拼。原创 2021-02-07 01:00:45 · 167 阅读 · 0 评论 -
第 226 场力扣周赛对战记录(排名356 / 4012)
感觉最近工作上写代码时有点力不从心,决定玩玩leetcode周赛锻炼下手感。这里记录每次周赛的心得,并且会以周赛题目中自己不擅长的地方为点,扩展题目训练或者记录技巧心得。历史周赛记录见:***第一题:做法:直接遍历所有小球, 计算小球各位之和后, 放进盒子里,最后统计一下盒子中球数量最大值。手速题。 java新手注意以下几点:因为球...原创 2021-01-31 15:44:29 · 400 阅读 · 0 评论 -
leetcode 1162. 地图分析
题意:就是求 每个海洋到陆地的最短距离中的最长距离最先想到的O(n^2*m)的方法:把每一列的陆地纵坐标存到列表中先从第一行开始每次从左往右扫, 先计算自己这一点x到这一列所有陆地的距离d然后再拿前面计算过的点x'到陆地的距离d', 再加上x- x',即min(d, d' + x - x')同理计算各行还有从右往左再扫一遍即可class Sol...原创 2019-11-02 21:13:15 · 247 阅读 · 0 评论 -
leetcode 1190. 反转每对括号间的子串
用栈解决就行, 遇到右括号,就反转再塞回去。class Solution { public String reverseParentheses(String s) { Stack<Character> stack = new Stack<>(); int top = 0; List<Character&...原创 2019-11-02 19:59:35 · 1239 阅读 · 0 评论 -
LeetCode 37. Sudoku Solver 数独游戏,DFS应用
设置3个数组, 两个二维数组行数组和 列数组, 用来判断该行或该列内, 该值是否可标记一个三维数组group数组,用来标记某个组内该值是否可标记然后用dfs去搜即可注意如果是数字则直接进入下一层记得设置退出标志class Solution {public: int endflag = 0,m,n; vector<vector<int>> cflag,...原创 2018-03-25 21:08:20 · 183 阅读 · 0 评论 -
LeetCode 77. Combinations DFS应用
求1-n的 k位数字的全排列用dfs即可注意剪枝, 当剩下的数字数量 小于 所需数量时,则return。class Solution {public: vector<vector<int>> ans; vector<int> nowv; void dfs(int s,int level,int n){ int i; ...原创 2018-03-05 19:22:20 · 200 阅读 · 0 评论 -
LeetCode 75. Sort Colors 交换排序
题意: 有1数组为 02210210201012, 我们要把他排序成000011112222这样要求不能用STL排序函数,空间复杂度为O(1)思路: 交换法设定左右两个指针每次把 左边的非0 和 右边的0 进行交换, 换完后继续找左边的非0和右边的0知道左右两个指针相遇,那么0都被换到最左边了。接着再同样处理1(不过要注意,此时不要牵扯到0,因为0已经排好序了)这样子的时间复杂度为O(n),...原创 2018-03-04 20:10:40 · 177 阅读 · 0 评论 -
LeetCode 71. Simplify Path 求绝对路径,字符串处理题
字符串 处理题注意以下几点即可: //// 即连续的/ /... 则...是目录名或文件名,而非..和. 空的输入,为/class Solution {public: string simplifyPath(string path) { vector<string> spath; string sdir; ...原创 2018-02-24 12:43:18 · 198 阅读 · 0 评论 -
LeetCode 64. Minimum Path Sum 二维路线最短路径
这里直接用的是二维,每次判断左边小,还是上边小,然后做dp。#define INF 0x7ffffffclass Solution {int pathl[1000][1000]; public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(), n =...原创 2018-02-24 10:49:00 · 449 阅读 · 0 评论 -
Leetcode 4suM
就是O(N3)。。。的复杂度,注意去除重复class Solution {public:vector< vector<int> > fourSum(vector<int>& nums, int target) { int n,i,j,left,right,k; vector< vector<int> >res; sor...原创 2016-09-10 21:41:19 · 288 阅读 · 0 评论 -
leetcode 4. Median of Two Sorted Arrays
寻找2个排序数组的中位数也就是求第K大的数字分割法:k1=k2=K/2-1,即都分成一半(这里的k1 k2用于下标,故和数量相关的话要加1)若分割下标比数组数量大,则取分割下标取数组最后一位若nums1[k1]<nums2[k2]那么数组1的前k1个可以舍去,接着求第K-k1-1大的数字同理若相等,看一下k1+k2+2是否刚好等于Kth,若相等,那么肯定就是这个数字否则都剔除掉,继续求int...原创 2016-09-08 16:58:10 · 240 阅读 · 0 评论 -
leetcode 36 Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be partially filled, where empty cells are filled with the character '.'.A partially filled sudoku which...原创 2016-09-07 23:27:25 · 277 阅读 · 0 评论 -
leetcode Submission Details
Given a sorted array of integers, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in the order of O(log n).If the target is not found in the a...原创 2016-09-07 21:50:45 · 429 阅读 · 0 评论 -
leetcode hash表Submission Details
s: "barfoothefoobarman"words: ["foo", "bar"]先弄一个hash表hword然后把words里的单词存进hword中,每个单词加1,。然后遍历s每次都看一下wn*lenw长度内是不是每个单词都存在即可class Solution {public: vector<int> findSubstring(string s, vector<...原创 2016-09-07 20:44:06 · 315 阅读 · 0 评论 -
LeetCode 74. Search a 2D Matrix 二维有序数组中找数字
剑指offer上的原题要点就是从右上角开始查找如果target比该值小说明该值往下都大于target, 故该值往下所有元素舍弃如果target比该值大说明该值往左的元素都小于target,故该值往左的所有元素舍弃直到找到该值或者越界不存在。class Solution {public: bool searchMatrix(vector<vector<int>>&a...原创 2018-02-26 21:00:14 · 214 阅读 · 0 评论 -
leetcode 47. Permutations II DFS应用
与上题不同的是,这次全排列中有相同的数字出现。解决方式要基于对DFS的理解(类似于一颗树)其实就是在树的某一层选择右边的节点时,若该节点与“在这一层时,上一次的选择”相同,则跳过。即在同一个层次时,不选重复的值。class Solution {public: vector<vector<int>> Ans; vector<int> vis; ...原创 2018-02-16 20:27:21 · 138 阅读 · 0 评论 -
LeetCode 48. Rotate Image 二维矩阵90度翻转问题,坐标推算,空间利用
题意: 90度翻转二维矩阵,且要求额外空间开销尽可能地小。思路:弄清楚90度翻转时,每个点翻转的规律即可假设该点的行列坐标为 (x, y)则翻转后他的位置为 (y,n-1-x)而这里要求空间开销小,即不应重建一个新矩阵。则我们应当一个个点去翻转。我用num1存当前点的值,num2为翻转后位置处的值令下一点值 = 当前的值接着继续这个过程,进行4次后, 一次翻转完毕,一次翻转 翻转了4个数字。注...原创 2018-02-17 16:37:05 · 232 阅读 · 0 评论 -
LeetCode 49. Group Anagrams Map应用和sort应用
题意很简单,,,就是把字母种类数量相同的字符串归并到一组中。这里用map去区分是否为一组即可,并为每一组设置一个index。注意:如果出现reference binding to null pointer of type ‘value_type’” 这个报错一般是数组下标的问题。这题里我忘记给vector<vector<string>> ans 赋空间。ans.push...原创 2018-02-17 17:26:55 · 226 阅读 · 0 评论 -
LeetCode 55. Jump Game 位置跳跃
当前位置的值 代表你最远能跳多远问能否从起点跳到终点。实现很简单,每次维护一个MaxIndex即可,如果当前坐标比MaxIndex大,说明GG了class Solution {public: bool canJump(vector<int>& nums) { int farIndex = 0; int i ; for(i...原创 2018-02-17 19:56:08 · 177 阅读 · 0 评论 -
LeetCode 56. Merge Intervals 合并交叉区间
合并交叉的区间这题的话,我先排序, 再去一一合并合并原则:如果当前区间的start, 比ans中最后一个区间的 end大 则肯定不需要合并,直接收入ans否则 若当前区间的end,比ans中最后一个区间的end小 则不需要操作,因为这个区间已经被“包含”了 否则, 将ans中最后一个区间的end修改。/** * Definition for an...原创 2018-02-17 20:27:49 · 242 阅读 · 0 评论 -
LeetCode 60. Permutation Sequence 全排列的第k个
求n位数的第k个全排列利用 n个数字的全排列为n!我们从第一个开始选假设n =3。k=5"123""132""213""231""312""321"我们要确定第一位数是什么。我们知道2的阶乘是 2即每次跨越2个。所以(5-1)/2=2即我们跨越了2个 2则所选数字为 第3个可选数字(用vis去查找可选数字)注意最后一个数字要单独去找。class Solution {public:原创 2018-02-17 21:22:06 · 430 阅读 · 0 评论 -
LeetCode 61. Rotate List 链表的右循环
简单的链表题,注意题意就行,是右循环。先遍历到最后一个节点,计算出链表总长。并用栈去保存遍历过的点。我们将最后一个节点移动到第一个点并利用栈去获取他的上一个点,继续循环操作。注意k>链表总长的情况此时应该取k = k%len/** * Definition for singly-linked list. * struct ListNode { * int val; * ...原创 2018-02-22 23:18:02 · 162 阅读 · 0 评论 -
LeetCode 62. Unique Paths 组合数的计算
class Solution {public: int uniquePaths(int m, int n) { m--;n--; int cdown = m + n; int cup = m < n?m : n; int k =cup; long long ans = 1;; while...原创 2018-02-23 13:19:00 · 171 阅读 · 0 评论 -
LeetCode 63. Unique Paths II 带障碍的求终点路径数量
起点的可行路径数量为1.接着从上往下,从左往右遍历每个点。从起点到每个点的可行路径数量 = 左边点的可行路径数量 + 上边点的可行路径数量若该点为1,则可行路径数量为0则最终可知结果。复杂度为O(m*n)class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& ob...原创 2018-02-23 15:33:15 · 475 阅读 · 0 评论 -
LeetCode 338. Counting Bits
今天开始,刷leetcode!一方面重新熟练编程,一方面为面试做准备!同时,记录每道题,并且要解释清楚,为的是面试能解释给面试官听!题意:求出【0,1,2,3……num】他们每个数字的二进制的1的个数思路:用举例法8的二进制是1000, 15的二进制是1111即8~15的二进制是1000~1111第一位永远是1则其countbit数量取决于000~111这个过程而000~111也就是0~7,在之前...原创 2016-08-23 11:18:36 · 357 阅读 · 0 评论 -
Leetcode1 twosum
题意:给一个数组,再给一个target,求数组中的2个数字,它们相加和尾target,给下标就好思路 :O(n^2)自然是遍历2次如果要O(n),则用哈希表比如target是10,num[0]=2,则hash[8]=2,,如果下次出现了8,那么直接得出答案class Solution {public: vector<int> twoSum(vector<int>&...原创 2016-08-23 17:36:15 · 246 阅读 · 0 评论 -
leetcode6 zigzagConversion
题意:一个字符串按照斜三角方式变换比如ABCDEFGHIJKLMNOPQR,按4行变换,则变成A G MB F H L N RC E I K O QD J P变换完之后再横向取字符串,即变成了AGMBFHLNRCEIKO...原创 2016-08-24 11:26:34 · 284 阅读 · 0 评论 -
Leetcode 3. Longest Substring Without Repeating Characters
题意:求字符串中的最长非重复子串思路 :用O(n)即可要求知道每次字符的上一次出现的位置例如0 1 2 3 4 5a a b c b c首先将每个字符的上次位置初始化为-1,左边界left设为0,当前子串长度now_sum为0遍历过程:i=0: a的上次位置为-1,小于边界0,故now_sum加1。同时a的上次位置变成0i=1: a的上次位置为0,大于等于边界0,所以再利用...原创 2016-08-24 17:22:50 · 266 阅读 · 0 评论 -
leetcode 29. Divide Two Integers
只用加 减 和位运算来做除法!方法x/y=n,即x能减n次y才小于0然而一个个减太蠢刚开始先减1次y然后减2次y再减4次y当n次y比a大了则重新从1次y开始减直到x彻底小于y为止!减了多少次y,则答案就是多少这题还要记得处理int边界先将所有数字转成long long才好判断有没有越int界long long 的取绝对值要用llabs函数才行!int divide(int dividend, in...原创 2016-09-07 19:55:27 · 220 阅读 · 0 评论 -
73. Set Matrix Zeroes 尽可能小的空间复杂度问题
题意:如果二维数组中有1个0, 则把那一行和那一列都变为0要求空间复杂度小于O(m + n)于是我的方法是O(m)空间复杂度每次遍历1行,如果发现是0,就把 列清零flag[列号] 置1如果那一行发现过0,则整行清0全部行都这样处理后,再对列进行处理,如果flag为1,就清零class Solution {public: void setZeroes(vector<vector...原创 2018-02-26 20:47:47 · 269 阅读 · 0 评论