- 博客(25)
- 收藏
- 关注
原创 【25届秋招备战C++】超高频面试手撕代码题
快指针和慢指针同时开始,每次快指针走两步,慢指针走一步,设共a+b个节点,且第a+1个节点即为环的入口,那么快慢指针第一次相遇时二者必然差n个环,即快指针走的步数f-慢指针走的步数s=n*b,解题思路:类似于元素交换,新建一个链表存储当前链表下一节点,更改当前链表的下一节点为上一节点(初始为空指针),给上一节点赋值为当前节点,当前节点接着赋值为暂存的下一节点。解题思路:引入第三个链表实现即可,同时为了方便处理新链表的头节点,引入了一个cur指针初始化指向一个新的链表节点,节点值为0,避免头节点处理。
2024-08-25 21:36:51
1693
原创 【25届秋招备战C++】算法篇-排序算法合集
排序算法是计算机科学中的基本算法之一,用于将一组数据按照特定的顺序(升序或降序)进行排列。排序算法广泛应用于数据管理和检索系统,提高数据访问效率,也是其他高级算法的基础,如搜索和合并算法。
2024-07-12 17:45:42
394
原创 【25届秋招备战C++】最强C++学习教程:Cherno C++笔记
纵览各种CPP教学视频,这是最接近底层逻辑的,生动有趣,举例精准贴切,希望所有在C++学习之路“踽踽独行”又迷茫困顿的初学者可以通过Cherno的视频理解C++,编程或许可以很有趣。
2024-03-16 10:44:06
1381
原创 【25届秋招备战C++】题型练习-背包问题
链接:最后一块石头的重量 Ⅱ解题思路:其实就是分割等和的变体,只要找到尽可能平分的背包即可。public:i++) { // 遍历物品j--) { // 遍历背包。
2024-03-11 22:11:34
688
原创 【25届秋招备战C++】题型练习-动态规划基础题
解题思路:递推公式易推:3阶及之后的台阶均为前一阶台阶的解法(只上1阶)+再前一阶台阶的解法(上2阶)实现,初始化dp[0]、dp[1]、dp[2],套入循环即可。解题思路:递推公式已给,初始化dp[0]、dp[1]、dp[2],套入循环即可(官方题解创建数组只留了三个元素的空间,效率高,很聪明!,且此时要注意第0行和第0列的路径只有1,初始化,代入循环即可。中的最小值,初始化,代入循环即可。
2024-03-10 22:57:00
370
原创 【25届秋招备战C++】算法篇-动态规划补充
背包问题(Knapsack Problem)是一类组合优化问题,属于动态规划的常用考察方向。它的核心是在一个给定的重量限制下,从一组物品中选择一部分物品,使得这些物品的总重量不超过背包的承重限制,同时使得所选物品的总价值最大化。主要是0-1背包和完全背包,多重背包不是考察重点。
2024-03-10 10:48:40
572
1
原创 【25届秋招备战C++】算法篇-动态规划(Dynamic Programming)
动态规划(Dynamic Programming,简称DP)是一种算法设计方法,它将一个复杂问题分解成更小的子问题,通过求解子问题来逐步构建出原问题的解。动态规划通常用于解决具有重叠子问题和最优子结构特性的问题,这些问题在计算机科学和数学优化领域中非常常见。动态规划的核心思想是将大问题拆分成小问题,存储小问题的解(通常在一个表格中,称为DP表),以便在解决大问题时可以直接查找或重用这些解,从而避免重复计算。这种方法可以显著提高算法的效率,尤其是在问题规模较大时。
2024-03-10 10:23:59
738
1
原创 【25届秋招备战C++】算法篇-贪心算法(Greedy)
一种在每次决策时,总是采取在当前状态下的最好选择,从而希望导致结果是最好或最优的算法。通常用于解决一些最优化问题,如找零问题、霍夫曼编码、最小生成树问题等。在每一步都做出当前看起来最好的选择,不考虑这个选择对后续步骤的影响。这种策略有时能够导致全局最优解,但并不是所有问题都适用。在某些问题中,贪心算法可能只能得到局部最优解,而不是全局最优解。如何验证可不可以用贪心算法呢?最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧。
2024-03-09 22:38:51
863
原创 【25届秋招备战C++】算法篇-回溯法(Backtracking)
回溯法是一种通过试错来寻找问题解的算法策略。它尝试分步解决一个问题,在每一步中,它都会做出一个选择,如果这个选择最终导致问题无解或者不是最优解,算法会撤销上一步或上几步的选择,然后尝试其他可能的选择。回溯法通常用于解决组合问题约束满足问题和优化问题。关键特点:选择:在每个决策点,算法需要在多个可能的选择中做出决定。约束:问题通常有一系列的约束条件,这些约束决定了哪些选择是合法的。目标:算法试图找到满足所有约束的解,或者在有限的步骤内找到最优解。
2024-03-09 20:54:59
536
原创 【25届秋招备战C++】算法篇-分治法(Divide & Conquer)
将一个复杂的问题分解成两个或多个相似的子问题,递归地解决这些子问题,然后将子问题的解合并以解决原始问题。这种方法的核心思想是将大问题分解为小问题,通过解决小问题来简化大问题的解决过程。
2024-03-09 16:38:55
585
原创 【25届秋招备战C++】算法篇-递归(Recursion)
递归(Recursion):指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中,可以通过在函数中再次调用函数自身的方式来实现递归。重点关注四个要素:输入参数,返回值,终止条件,递归拆解(如何递归下一层)注意:递归是利用堆栈来实现的。每一次递推都需要一个栈空间来保存调用记录,每当进入一次函数调用,栈空间就会加一层栈帧。每一次回归,栈空间就会减一层栈帧。由于系统中的栈空间大小不是无限的,所以,如果递归调用的次数过多,会导致栈空间溢出。考虑栈溢出问题,可采用迭代等方法替代递归。
2024-03-09 16:28:43
680
原创 【25届秋招备战C++】算法篇-滑动窗口法(Sliding Window)
滑动窗口算法是一种在序列数据(如数组、字符串等)上执行特定操作的算法,它通过在序列上滑动一个固定大小的窗口来处理数据。这个窗口可以包含序列的一部分元素,并且随着算法的执行,窗口会沿着序列移动,主要用来减少while循环。滑动窗口算法的效率通常取决于窗口大小和序列长度。在最坏情况下,滑动窗口算法的时间复杂度为On\ O(n)On,其中n是序列的长度。
2024-03-09 12:04:23
1749
原创 【25届秋招备战C++】算法篇-二分查找法(Binary Search)
二分查找(Binary Search)算法是一种在中查找特定元素的高效算法。它的核心思想是通过不断将搜索范围减半来定位目标值,从而减少查找所需的比较次数。其时间复杂度为OlogN。
2024-03-09 11:44:06
590
原创 【25届秋招备战C++】算法篇-双指针(Two Points)
一种在数组或序列数据结构中常用的技术,它使用两个指针来遍历和处理数据。这种方法通常用于处理需要在序列中进行特定等任务的问题。双指针法并不局限于某一种数据结构,数组、链表、字符串等都可以采用双指针法,一般是用来提高效率降低复杂度。主要分为三种:普通双指针、对撞双指针、快慢双指针:两个指针往同一个方向移动(一般情况,但其实并不局限于同一方向):两个指针面对面移动:慢指针+快指针。
2024-03-09 11:21:25
556
原创 【25届秋招备战C++】数据结构篇-图(Graph)
图(Graph)是由一组顶点(Vertex)和一组边(Edge)组成的数学结构。顶点可以表示实体,而边则表示实体间的关联。(Undirected Graph):如果图中的每条边都没有指向性,则称为无向图。(Directed Graph):如果图中的每条边都具有指向性,则称为有向图。:与该顶点相关联的边的条数。而对于有向图,可以将顶点的度分为 「顶点的出度」 和 「顶点的入度」。:以该顶点为出发点的边的条数。:以该顶点为终止点的边的条数。有向图中某顶点的度 = 该顶点的出度 + 该顶点的入度。
2024-03-09 10:44:56
2216
原创 【25届秋招备战C++】数据结构篇-二叉树
由 n≥0 个节点与节点之间的关系组成的有限集合。当 n=0 时称为空树,当 n>0 时称为非空树。
2024-03-08 22:24:15
2207
原创 【25届秋招备战C++】题型练习-链表
先将原链表赋给temp,pre的next指向cur,此时可令cur与pre相等,即将pre赋给cur,而新的pre应该读取temp。引入三个链表,一个pre记录原有的链表,一个cur记录当前链表,一个temp临时存储数据。解题思路:查找元素,断掉链接,指针跳过到再下一个,delete清除空间。解题思路:确定指针指向的位置即可,参见。
2024-03-04 22:32:27
360
原创 【25届秋招备战C++】数据结构篇-栈与队列
栈是一种遵循后进先出(LIFO)原则的数据结构,它在内存中以连续的方式存储元素。在栈中,添加和移除元素的操作都发生在栈顶。
2024-03-04 11:27:01
416
原创 【25届秋招备战C++】题型练习-数组
解题思路:按对角线遍历的话首先可将移动方向分为向上或向下(严格来说是斜向上或斜向下),而同一对角线上各点的横纵坐标之和相同,相邻对角线的横纵坐标之和相差1,且横纵坐标之和为奇数时对角线方向向下,横纵坐标之和为偶数时对角线方向向上。在向上的对角线中,当横纵坐标之和小于n时对应对角线的起始点则在x=0的第一行,纵坐标是和-横坐标,横纵坐标之和大于或等于n时对角线的起始点在x=和-列数+1的最后一行,纵坐标是列数-1。向右轮转k个位置,即在新数组的第i+k位(当i+k<原数组大小时)对应原数组的第i位,
2024-03-03 18:06:17
902
原创 【25届秋招备战C++】数据结构篇-数组
一种线性表数据结构。数组在连续内存空间中存储相同类型的元素。顺序结构存储1.数组的下标是从0开始的2.数组内存空间是连续的3.数组不能删除,只能覆盖4.数组中的数据元素可随机访问注意:区分元素与索引;区分访问与搜索PS:数组和指针都可以像标准库的vector一样顺序地遍历一组数据,然而他们与vecto相比却能更直接地接触到计算机的内存,因此在高效的同时也会有更大的风险。所以在一般情况下,推荐使用vector。
2024-03-02 18:04:26
777
原创 【C++ Error】runtime error -vector的初始化问题
vector作为动态数组的容器,初始化可以通过vector vectorname的形式实现,但跳过分配空间的声明在编译可以通过但运行时会报错,因此变量声明时最好还是定义其分配空间大小,或者先为其添加元素再通过数组小标形式访问。数组array与C++ STL容器vector均可实现数组定义,其中数组静态分配内存,定义时必须要分配空间大小,即形如下面这样是会报错的。1.vector越界(下标小于0或大于vector.size())-容易判断此处省略。2.vector未分配空间强制下标访问。
2024-03-02 16:44:00
1042
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅