随笔分类 - 算法
摘要:Task01:变量、运算符、数据类型及位运算 笔记 is, is not 对比的是两个变量的地址,==, != 对比的是两个变量的值。 bin(a) 可以把十进制转换为二进制后输出。 对于正数而言,不管是反码还是补码,都没有变化;对于负数而言,反码是符号位不变,其余位取反,补码等于反码+1。 通过^
阅读全文
摘要:题目: 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为
阅读全文
摘要:题目: 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] *
阅读全文
摘要:题目: 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 题解: class Solution { public: int minDistance(string
阅读全文
摘要:题目: 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。它应该支持以下操作:get 和 put。 get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。 put(key, value) - 如果键不存在,请设置或插入值。当缓存达到其容量时,则应该在插入新项之前
阅读全文
摘要:咳咳 在学校就不好好学C++ 现在惨了吧 啥也不会 好 那么来补充一下关于unordered_map的一些简单操作吧 定义 它叫做:无序映射。 C++ STL中的unordered_map实现使用了哈希表,在O(1)的时间实现对元素的查找,但是相应地在空间的开销增大了。 一些资料上比较了它和map的
阅读全文
摘要:题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路: 首先构建两个栈,h存高度,idx存下标。 遍历数组,将height[i]与h.top()做比较 若h
阅读全文
摘要:No.53:最大子序列和 首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans。 如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字 如果 sum ⇐ 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字 这种方法可
阅读全文
摘要:题目: 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
阅读全文
摘要:题目: 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。 每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活细胞周围八个位置的活细胞数少于两个,则该位置活
阅读全文
摘要:贪心算法 区间选点 /* 给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。*/ const int N = 100010; int n; struct Range { int l, r; bool
阅读全文
摘要:01背包 完全背包 多重背包 分组背包 混合背包 对于物品而言只能选择1个或者0个两种情况 对于物品而言可以无限制选取,也可以不选 对于物品而言最多能够选择从s[i]个,同样也可不选 一些物品捆绑在一起,每一组物品中只能选择其中的一个物品 有些物品可以选择1,有些物品可以选择无数个,有些物品只能选择
阅读全文
摘要:位运算 位运算的基本操作 typedef struct Bitset { int setsize; // 16 32 ... int 是32位的 int arraysize; // 相当于有几行 unsigned short *v; // 之后会分配一片连续的空间 }Bitset; //还非要大写才
阅读全文
摘要:二叉树 构建二叉树 typedef struct BTNode{ int data; struct BTNode *left; struct BTNode *right; }BTNode; // 创建二叉树 BTNode BinaryTree() { BTNode *T = (BTNode*)mal
阅读全文
摘要:集合专题 初始化parent集合 const int N = 100; int parent[N], rank[N]; for(int i = 0; i < N; i++) { parent[i] = i; rank[i] = 0; // 为路径压缩做准备 } 寻找祖先结点 int find(int
阅读全文
摘要:图的遍历和应用 实现方式:邻接矩阵可以使用vector。邻接矩阵的无穷表示方法: memset( road, 0x3f, sizeof(road) ); 应用场景:拓扑图、最小生成树、最短路径、二分图、DFS、BFS。 全排列问题 const int N = 7; int path[N+1]; bo
阅读全文
摘要:堆排序 // 建立大根堆 void sort(int R[], int low, int high) { int i = low, j = 2 * i; int temp = R[i]; while (j <= high) { if (j<high && R[j] < R[j+1]) { j++;
阅读全文
摘要:栈的应用 ###单调栈 // 常见模型:找出每个数左边离它最近的比它大/小的数 int tt = 0; for (int i = 1; i <= n; i ++ ) { while (tt && check(stk[tt], i)) tt -- ; stk[ ++ tt] = i; } 深搜模版 b
阅读全文