随笔分类 -  leetcode算法题

摘要:哈希表的概念 在前几章的学习中,我们已经了解了数组和链表的基本特性,不管是数组还是链表,如果我们想要寻找一个特定的数值,时间复杂度都为O(n)。那有什么办法用最快的速度来找到一个特定的元素呢,今天我们就来学习工业界中常用的数据结构“哈希表”,在哈希表中,不管是寻找、删除、增加一个新元素,时间复杂度都 阅读全文
posted @ 2021-06-13 14:15 秋华
摘要:在这一章我们来了解两个很特殊的数据结构:堆栈 (Stack) 和队列 (Queue)。这两个数据结构类似垃圾桶和队伍,栈是先进后出型,队列是先进先出型。 堆栈(Stack) 概念 堆栈是一种常用的数据结构,这种数据结构的存储方式和垃圾桶一样,后面放进去的元素可以先取出来,而最早放入的元素会被压在最下 阅读全文
posted @ 2021-06-13 14:12 秋华
摘要:链表的概念 我们知道数组是很常用的数据储存方式,而链表就是继数组之后,第二种最通用的数据储存方式了。数组需要存放在连续的空间,计算机很容易实现。而链表的好处是不用确定空间长度,不够的时候,直接申请新的节点,帮助插入。所以链表可以更灵活地进行内存分配。 链表(linked list)是一种序列形的数据 阅读全文
posted @ 2021-06-13 14:06 秋华
摘要:排序算法 搜索是计算机中非常重要的步骤,但是从无序的数据中寻找特定的数字往往很难,我们之前提到的二分查找只能运用在排好序的数组中。所以排序算法是一个很重要的工作,如果我们能够将数值排好序,那么当我们寻找特定数值的时候,能省下不少功夫。 排序算法有很多,每种排序算法各有优缺点: 在这章节中,我们就来学 阅读全文
posted @ 2021-06-13 13:58 秋华
摘要:来源:https://turingplanet.org/2020/02/03/%e3%80%90%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84%e5%92%8c%e7%ae%97%e6%b3%953%e3%80%91/ 复杂度分析 算法本质上是一连串的计算步骤。对于同一个问 阅读全文
posted @ 2021-06-13 13:54 秋华
摘要:来源:https://blog.csdn.net/wei18791957243/article/details/109061869 1.什么是分治算法? 分治算法就是对一个问题采取各个击破的方法,将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解 阅读全文
posted @ 2021-06-07 21:53 秋华
摘要:来源:https://zhuanlan.zhihu.com/p/72734354 分治法,字面意思是“分而治之”,就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这个思想是很多高效算法的基础,例如排序算 阅读全文
posted @ 2021-06-07 21:45 秋华
摘要:主要思想 分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐个击破(一般是同种方法),将已经解决的子问题合并,最后,算法会层层合并得到原问题的答案。 分治算法的步骤 分:递归地将问题分解为各个的子问题(性质相同的、相互独立的子问题); 治:将这些规模更小 阅读全文
posted @ 2021-06-07 21:41 秋华
摘要:0 解题步骤 回溯法解题时通常包含3个步骤: 1. 针对所给问题,定义问题的解空间; 2. 确定易于搜索的解空间结构; 3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 对于问题的解空间结构通常以树或图的形式表示,常用的两类典型的解空间树是子集树和排列树。当所给的问题是从n个元 阅读全文
posted @ 2021-05-23 20:46 秋华
摘要:来源:https://zhuanlan.zhihu.com/p/93530380?ivk_sa=1024320u 解决一个回溯问题,实际上就是一个决策树的遍历过程。 只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的选择。 3、结束条件:也就是到达决策树底 阅读全文
posted @ 2021-05-23 17:45 秋华
摘要:10. 正则表达式匹配 31.1% 困难 17. 电话号码的字母组合 56.6% 中等 22. 括号生成 77.1% 中等 37. 解数独 67.0% 困难 39. 组合总和 72.4% 中等 40. 组合总和 II 63.6% 中等 44. 通配符匹配 32.2% 困难 46. 全排列 77.9% 阅读全文
posted @ 2021-05-13 22:56 秋华
摘要:什么是回溯# 在求解诸如八皇后、全排列等问题时,我们通常使用深度优先搜索dfs在解空间内搜索满足条件的解,dfs的搜索过程可以看做是在一棵搜索树上遍历的过程。例如,求数字[1,2,3]的全排列的搜索树如下:当我们搜索到树的深层向浅层返回的过程就是回溯。(我认为可以这样理解:从上往下搜索是递归,从下往 阅读全文
posted @ 2021-05-13 22:35 秋华
摘要:前言 回溯法,⼀般可以解决如下⼏种问题: 组合问题:N个数⾥⾯按⼀定规则找出k个数的集合 切割问题:⼀个字符串按⼀定规则有⼏种切割⽅式 ⼦集问题:⼀个N个数的集合⾥有多少符合条件的⼦集 排列问题:N个数按⼀定规则全排列,有⼏种排列⽅式 棋盘问题:N皇后,解数独等等 组合是不强调元素顺序的,排列是强调 阅读全文
posted @ 2021-05-13 22:29 秋华
摘要:2. 两数相加 40.1% 中等 17. 电话号码的字母组合 56.6% 中等 21. 合并两个有序链表 66.0% 简单 24. 两两交换链表中的节点 69.6% 中等 98. 验证二叉搜索树 34.2% 中等 104. 二叉树的最大深度 76.2% 简单 110. 平衡二叉树 55.7% 简单 阅读全文
posted @ 2021-05-13 21:55 秋华
摘要:来源:https://blog.csdn.net/qq_43152052/article/details/101227649 1、递归定义: 在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递和归,这正是递归思想的精华所 阅读全文
posted @ 2021-05-12 23:35 秋华
摘要:来源:https://blog.csdn.net/pdfcxc/article/details/98472591 前言 相信不少同学和我一样,在刚学完数据结构后开始刷算法题时,遇到递归的问题总是很头疼,而一看解答,却发现大佬们几行递归代码就优雅的解决了问题。从我自己的学习经历来看,刚开始理解递归思路 阅读全文
posted @ 2021-05-11 23:36 秋华
摘要:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知 阅读全文
posted @ 2020-11-19 11:53 秋华
摘要:这道题的输入是一个二维数组(n ∗ m n*mn∗m),然后要我们求联通区域的块数我的思路是创建一个一个长度为n ∗ m n*mn∗m的一维数组作为初始并查集,然后使用遍历输入的二维数组,每当发现某个位置的右边或者下面的值是1,并且本身的值也是1的时候,合并这两个区域。(注意二维数组的索引不要搞混, 阅读全文
posted @ 2020-11-19 11:51 秋华
摘要:一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。 题目数据保证答案肯定是一个 32 位的整数。 示例 1: 输入:s = "12"输出:2解释:它可以解码为 "AB"(1 2)或者 " 阅读全文
posted @ 2020-11-19 11:40 秋华
摘要:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2: 输入: "cbbd"输出: "bb" 来源:力扣(LeetCode)链接:https://leetcode- 阅读全文
posted @ 2020-11-19 11:38 秋华