
算法
文章平均质量分 74
南瓜派PumpkinPie
这个作者很懒,什么都没留下…
展开
-
Leetcode 22. Generate Parentheses解题思路
题目:Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.Example 1:Input: n = 3Output: ["((()))","(()())","(())()","()(())","()()()"]方法1: brute force假设我现在有个空篮子可以用来装括号,我先不管这个篮子的括号是否有效,每次我选开括号"(“或者闭括号”)"原创 2021-06-17 00:55:33 · 316 阅读 · 0 评论 -
两种方法推导建堆的时间复杂度O(n)
可以通过siftdown或者siftup建立二叉堆。siftdown: 如果节点小于其最大的子节点,将二者进行交换,直到节点大于或等于所有子节点。整个过程节点向下调整。siftup: 如果节点大于其父节点,将二者交换,直到节点小于或者等于其父节点。整个过程节点向上调整。siftdown或者siftup在最坏情况下都是O(logn)。siftdown操作次数取决于节点离堆底的距离,siftup的操作次数取决于节点离堆顶的距离。siftdown的效率更高一些,因为建堆时计算每个节点到底部或者顶部的距离原创 2021-05-10 08:16:51 · 1487 阅读 · 0 评论 -
leetcode题解 meeting-scheduler
题目链接:https://leetcode.com/problems/meeting-scheduler/Given the availability time slots arrays slots1 and slots2 of two people and a meeting duration duration, return the earliest time slot that works for both of them and is of duration duration.If there原创 2021-04-30 03:30:26 · 355 阅读 · 0 评论 -
7天刷完剑指offer(二)
题库来源:牛客网《7天刷完剑指offer》系列只提供解题思路,代码实现见牛客网数值的整数次方题目:思路解法1: 暴力法。exponent个base相乘,循环exponent次。时间复杂度:O(n),空间复杂度:O(1)解法2: 快速幂。已知basee=(basee2)2base^e = (base^{\frac{e}{2}})^2basee=(base2e)2, 如果e 是偶数。当e是奇数,basee=(basee2)2∗basebase^e = (base^{\frac{e}{2}})^2原创 2021-03-23 14:02:49 · 203 阅读 · 0 评论 -
字节跳动大数据开发编程题集合
编程题来源于牛客网的面经让写一个二叉树最长路径和,返回这个路径和中最大和的那些节点思路:递归。当前节点的最大贡献值(路径和) = 当前节点值 + 左子树最大贡献 + 右子树最大贡献使用队列实现栈的的过程思路:栈的add, pop操作小和问题思路:归并排序https://blog.youkuaiyun.com/qq_34761012/article/details/104859991判断平衡二叉树思路:递归。先通过递归和hashmap获得每个节点为根的高度depth = max(left原创 2021-03-03 15:05:09 · 966 阅读 · 1 评论 -
7天刷完剑指offer(一)
7天看完剑指offer解题思路(一)题库来源:牛客网《7天看完剑指offer解题思路》系列只提供解题思路,代码实现见牛客网二维数组查找题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路解法1:暴力枚举遍历数组中每个元素,如果找到了target,就返回true,否则返回false时间复杂度:O(n2)O(n^2)O(n2)空间复杂度:O(1)原创 2021-02-09 11:32:53 · 600 阅读 · 0 评论 -
【刷题打卡】day11-二叉树
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。Insert Node in a Binary Search Tree题目链接难度:easy算法:二分法解题思路插入一定在树的叶子节点上。如果target大于节点值,往右子树搜索;否则,往左子树搜索。当搜索null时,说明可以找到可以插入的位置。存储插入位置之前的那个父节点。如果该父节点大于target,target是父节点的左节点,否则是右节点。时间复杂度:O(logn)空原创 2021-01-15 08:36:23 · 819 阅读 · 0 评论 -
【刷题打卡】day10-分治法
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。Invert Binary Tree题目链接难度:easy算法:分治解题思路采用分治的思想,先通过递归的方式把左右子树各自翻转后,再将根节点左右子树翻转一下。注意:这里说不能用递归。不用递归就徒手写栈吧。反正递归也是通过栈实现时间复杂度:O(logn)空间复杂度:O(1)解法/** * Definition of TreeNode: * public class T原创 2021-01-14 11:48:37 · 672 阅读 · 0 评论 -
【刷题打卡】day9-图和bfs
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。431. Connected Component in Undirected Graph题目链接难度:medium算法:bfs解题思路遍历节点数组nodes中的节点,如果节点没有被访问过,说明这个节点在一个新的连接块(Connected Component)上,新建一个数组存储该连接块中的节点。通过bfs获取与该节点连接在一起的所有节点。注意在同一个连接块中的节点按照label原创 2021-01-13 12:18:05 · 389 阅读 · 0 评论 -
【刷题打卡】day8-图和bfs
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。892. Alien Dictionary题目链接难度:hard算法:拓扑排序时间复杂度:这道题的时间复杂度我也有点纠结,在建图过程中先循环words,然后嵌套循环每个单词中的字符,其中用了if语句提早终止循环。如果if语句不算基本操作,那么这里的时间复杂度就是O(max(V, E))。如果if语句算作基本操作,那么时间复杂度最坏就是O(MN),M表示单词数,N表示最长的单词字符数原创 2021-01-12 12:50:33 · 977 阅读 · 0 评论 -
【刷题打卡】day7-BFS
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。598. Zombie in Matrix题目链接难度:medium算法:bfs时间复杂度:O(nm), 遍历整个matrix,需要O(nm)空间复杂度:O(nm),队列最大内存开销是当matrix所有元素初始值都是zombie。解题思路这道题我最开始的思路是遍历matrix,将僵尸加到队列中将队首出队,将队首附近的被感染的人入队循环第2步直到队列为空。遍历此时的m原创 2021-01-11 15:01:50 · 3433 阅读 · 0 评论 -
【刷题打卡】day5-二分法
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。457. Classical Binary Search题目链接难度:easy算法:二分法时间复杂度: O(n)空间复杂度:O(1)解题思路套用九章算法的二分法模版解法public class Solution { /** * @param nums: An integer array sorted in ascending order * @原创 2021-01-07 05:16:37 · 628 阅读 · 0 评论 -
【刷题打卡】day6-二分法和bfs
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。62. Search in Rotated Sorted Array题目链接难度:medium算法:二分法时间复杂度:O(logN)空间复杂度:O(1)解题思路两种解法解法1: 先二分法找到最小值,判断target在最小值的左边还是右边,然后继续用有序数组二分法在左边或者右边查找解法2: 直接二分法,先判断递增序列在mid的左侧还是右侧,然后判断target是否在递增序列原创 2021-01-07 05:15:58 · 217 阅读 · 2 评论 -
【刷题打卡】day4-双指针
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。382. Triangle Count题目链接难度:medium算法:双指针时间复杂度:O(n^2)空间复杂度:O(1)解题思路根据两边之和大于第三边,先找最大边,然后根据2sum的方法找到和大于最大边的两个数。解法public class Solution { /** * @param S: A list of integers * @ret原创 2021-01-01 11:33:57 · 390 阅读 · 0 评论 -
【刷题打卡】day3-双指针
从现在开始每天至少刷一道题。题库:lintcode有些题目链接打不开,需要权限,那大家就去九章算法参考答案里找找。539. Move Zeroes题目链接难度:easy算法:同向双指针解题思路同向双指针指的是两个指针从头走到尾,方向相同。一看到这种把0放到一头,非0的数字放另一头的题目,而且还是in-place,优先考虑用双指针。双指针特别是同向双指针的题目最主要是理解两根指针代表的含义。这道题我们需要一根指针(right)遍历原来的数组,还要一根指针(left)指示新数组非0元素的位置。在原创 2020-12-29 07:54:02 · 113 阅读 · 0 评论 -
【刷题打卡】day2-字符串string
从现在开始每天至少刷一道题。题库:lintcode594. strStr II题目链接难度:hard算法:Rabin–Karp先普及两个知识点滚动哈希和Rabin–Karp算法什么是滚动哈希?首先了解一下通过哈希函数,将字符转化成数字,id(char) = char - ‘a’ + 1。 例如字符’c’可以转化成3。滚动哈希指的是当前哈希值依赖上一个哈希值的结果作为输入。给定一个字符串s, i 为s的索引, hash(i) = (hash(i-1) * base + id(s[i]) )原创 2020-12-28 08:34:07 · 478 阅读 · 0 评论 -
【刷题打卡】day1 - 字符串string
从现在开始每天至少刷一道题。题库:lintcode1790. Rotate String II题目链接难度:easy算法:字符串操作解题思路总偏移量offset = left - right。如果总偏移量>0, 字符串往左偏移, offset从起点开始偏移,把[0, offset], [offset, string长度]两边子字符串交换一下。如果right > left. 字符串往右偏移,offset从终点开始偏移, 把[0, string长度-offset]和[string长原创 2020-12-27 04:00:25 · 306 阅读 · 1 评论 -
单词搜索 II · Word Search II答案解析
题目:原题见lintcode链接, 或者复制以下链接到浏览器https://www.lintcode.com/problem/word-search-ii/description?_from=ladder&&fromId=161132. Word Search IIGiven a matrix of lower alphabets and a dictionary. Find all words in the dictionary that can be found in the ma原创 2020-08-05 05:22:22 · 644 阅读 · 0 评论 -
终于学会了二分类
我一直觉得二分类写法变来变去,有时候+1, 有时候-1,完全摸不着头脑。直到我上了某章的算法课,里面讲到了二分法模版,变形,我才恍然大悟。二分法模版题目见https://www.lintcode.com/problem/first-position-of-target/description基础模版详细解析我用的模版class Solution: """ @param nums: The integer array. @param target: Target to fin原创 2020-07-20 14:56:53 · 242 阅读 · 0 评论 -
最长回文子串Longest Palindromic Substring
题目见lintcode, 其他参考答案见九章算法描述给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。样例样例 1:输入:“abcdzdcab”输出:“cdzdc”样例 2:输入:“aba”输出:“aba”挑战O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好。方法一:中心点枚举注意:要考虑中心点是一个数(比如: aba)和两个数(比如:abba)的情况。如果不清楚是+1还是-1,找个实例验证一下原创 2020-07-20 05:53:29 · 163 阅读 · 0 评论 -
字节跳动提前批-算法-笔试
根据kyrie同学的字节跳动提前批-算法-笔试面经中的三道题给出自己的解法第一题:输入说明:第一行输入n代表队伍中的人数第二行输入队伍中每个人的身高(用空格隔开)比如输入:52 3 1 5 465 4 1 6 8 2输出说明:如果现在所在位置之前没有比自己身高高的,数值变为-1,如果现在所在位置之前有比自己身高高的,数值变为所在位置之前那个离自己最近的且比自己高的那个人的身高上例的输入对应输出:5-1 -1 3 -1 46-1 5 4 -1 -1 8思路:题目中输入5, 2原创 2020-07-18 03:52:59 · 571 阅读 · 0 评论