算法
文章平均质量分 83
Strive for the best!
这个作者很懒,什么都没留下…
展开
-
14.算法——拓扑排序(课程表问题210,207)
问题介绍我理解主要是这么一个图论问题,在一群节点中,每个节点都有自己的入度和出度,一条有向边的方向可以理解为先后问题。而后我们对这些节点进行排序,保证先访问入度为0的节点。主要是看有没有环的问题。这样讲可能有些玄幻,举个例子。课程表问题在这个题目中,数组pre的first代表要想修1必须修0,即一条从0到1的有向边。解法:广度优先队列表示访问,入度为0的先访问(出队),访问到某一个节点之后,与其相邻节点的入度减一,如果减一之后出现新入度为0的节点,继续入队。看最后访问数组的size和原数组原创 2022-05-12 17:02:37 · 316 阅读 · 0 评论 -
13.算法——位运算
运算符号位运算主要运用二进制运算的特性进行优化,主要运用运算符号包括异或:^, x ^ x=0, x ^ 0=x, x ^ 全1= ~x与 : & , x & x=x,x & 0=0,x & 1=x或:|,x | x=x,x |0=0,x | 1=x;取反:~左移:<<;移动一位:x<<=1;右移:>>注意:优先级高于一次运算符,所以如果写。。。。。注意左边要打括号。常用操作n&(n-1) 去除最低位的1原创 2021-08-30 13:54:09 · 254 阅读 · 0 评论 -
12.算法与数据结构——栈和队列
我们在前文中已经提到,栈和队列都是基于双端队列(deque)的,试题中对于栈的考察往往在于基于栈设计一个数据结构或者直接设计一个栈。原创 2021-08-30 09:31:17 · 74 阅读 · 0 评论 -
11.算法与数据结构——树(递归遍历,层次遍历,按序遍历,二叉查找树)
树就是单链表的子节点发生了变化,就多了一个子节点而已。LeetCode 默认的树表示方法如下。struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};递归104. 二叉树的最大深度递归终点很好确定,就是空节点。我们每次如果root 是空就返回0,否则就用1+左右子树深度的最大值class Solution {publ原创 2021-07-22 16:13:58 · 384 阅读 · 0 评论 -
10.算法与数据结构——数组
448.找到所有数组中消失的数字方法一:哈希表class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { int n=nums.size(); unordered_map<int,int> mp; for(auto i:nums) { ++mp[i];原创 2021-07-14 16:08:03 · 92 阅读 · 1 评论 -
9.算法与数据结构——C++STL
1.顺序容器vector动态数组,用于 O(1) 的随机读取原创 2021-07-09 16:27:12 · 248 阅读 · 0 评论 -
8.算法与数据结构——指针与链表
链表简介我们知道,如果申请一块儿连续的存储来储存数据的话,一旦遇到插入和删除操作,这个时候后续所有数据都需要向前或者向后移动,这种时间上的开销甚至可能达到O(N)。所以我们想到用不连续的存储,即用链表来存储,每个链表节点中,含有两部分,第一部分是值部分,第二部分是指针部分,通常记作NEXT指针,NEXT指针指向下一个节点的的位置。如果其是最后一个节点,NEXT则指向NULL。我们来看一下leetcode默认的链表表示方法:struct ListNode {int val;ListNode *ne原创 2021-06-27 16:59:28 · 2639 阅读 · 1 评论 -
7.算法——动态规划,一维,二维,分割类问题,子序列问题,背包问题,字符串问题,股票问题,练习
算法解释动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。同时,我们也可以对动态规划进行空间压缩,起到节省空间消耗的效果。在一些情况下,动态规划可以看成是带有状态记录(memoization)的优先搜索。状态记录的意思为,如果一个子问题在优先搜索时已经计算过一次,我们可以把它的结果储存下来,之后遍历到该子问题的时候可原创 2021-05-17 14:51:25 · 731 阅读 · 0 评论 -
6.算法——搜索,深度优先搜索:695岛屿最大面积,547省份数量,417水流问题;回溯法:46排列,77组合,79单词搜索,51N 皇后;广度优先搜索:934最短的桥,126单词接龙
深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。深度优先搜索(DFS)深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言,由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。如有简单树:我们从 1 号节点开始遍历,假如遍历顺序是从左子节点到右子节点.假如我们使用递归实现,我们的遍历过程为 1(起始节点)-&原创 2021-04-24 21:19:48 · 318 阅读 · 0 评论 -
5.算法——排序算法,快速排序(分治思想,例215第K大元素),冒泡排序,归并排序,桶排序(例347前 K 个高频元素,unordered_map)练习451. 根据字符出现频率排序,75 颜色分类
快速排序1.分而治之的思想:快速排序采用分而治之的思想。这个思想主要包括两个内容:找出简单的基线条件。(即满足基线条件时,函数不再调用自己)确定如何缩小问题规模,使其符合基线条件。这里再解释一下基线条件的问题,可能看上面的看不太懂,打个比方。如果我们要将一个长方形均匀的分成尽可能大的正方形,应该怎么分?是不是如果长刚好是宽的整数倍的时候就可以分了,如果不是整数倍,那我们就先在长上面划几个宽出来,剩下的继续找直到小长是小宽的整数倍为止。所以上面这个问题的基线条件就是能找到长是宽的整数倍,就原创 2021-04-04 16:59:04 · 333 阅读 · 0 评论 -
4.算法——二分查找,例:69 x的平方根,34 在排序数组中查找元素的第一个和最后一个位置,81旋转数组查找数字,154寻找旋转排序数组中的最小值 II,540 有序数组中的单一元素
算法解释二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(logn)。举例来说,给定一个排好序的数组 {3,4,5,6,7},我们希望查找 4 在不在这个数组内。第一次折半时考虑中位数 5,因为 5 大于 4, 所以如果 4 存在于这个数组,那么其必定存在于 5 左边这一半。于是我们的查找区间变成了 {3,4,5}。(注意,根据具体情况和您的刷题习惯,这里的 5 可原创 2021-03-12 20:42:11 · 272 阅读 · 0 评论 -
3.算法—双指针,指针与常量和函数,167两数之和,88合并两个有序数组,滑动窗口:76最小覆盖子串。练习:633平方数之和,680验证回文字符串,524通过删除字母匹配到字典里最长单词
算法解释双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若遍历反向相反,则可以用来搜索有序数列。指针有关内容复习1.指针与常量#define预处理与const关键字要注意const类型定义的不能重定义,即不能修改int *p=&x;//此种方式指针和值均可修改const int *p2=&x;//此为一co原创 2021-03-09 17:13:04 · 132 阅读 · 0 评论 -
2.算法-贪心算法,分配问题(leetcode455发饼干,135发糖果),区间问题(435无重叠区间),练习(605种花,452射气球,122 买卖股票)
一 算法解释保证每次操作都是局部最优,局部结果互不相干,全局结果是局部结果的简单求和,从而使最后得到的结果是全局最优的。二 分配问题例1:leetcode题455,分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满原创 2021-01-28 14:57:13 · 467 阅读 · 2 评论 -
1.算法-时间问题,大O表示法
第一类是算法,包括贪心算法,二分查找,排序算法,搜索算法,动态规划和分治算法。第二类是数据结构,包括stl内常见数据结构,字符串处理,链表,树和图。其中,链表,树,图都是用指针表示的数据结构,且前者是后者的子集。最后加上一些并查集和LRU。...原创 2021-01-22 10:47:08 · 142 阅读 · 0 评论