- 博客(80)
- 收藏
- 关注
原创 Visual Studio里的调试(debugging)功能介绍
调试的起源可以追溯到计算机发展的早期阶段。在 20 世纪 40 年代,世界上第一台通用电子计算机 ENIAC 诞生后不久,调试就成为了必要的工作。当时,计算机系统由大量的电子管、继电器等组成,硬件故障频繁出现。有一个著名的事件标志着 “调试” 一词的正式诞生。1947 年,Grace Hopper 团队在哈佛大学的 Mark II 计算机上工作时,发现计算机故障是由于一只飞蛾被困在继电器中导致的。
2025-03-15 17:48:27
1197
1
原创 C++标准模板库学习--函数模板返回值参数类型
是 C++ 标准库头文件中提供的一个模板元编程工具,用于确定一组类型的公共类型。它的主要作用是在编译时找出能够表示所有给定类型值的最通用类型。在处理模板编程时,经常会遇到需要对不同类型进行操作并返回一个合适类型的情况,就可以帮助我们自动推断出这个合适的类型。例如,当你有一个模板函数,需要对不同类型的参数进行比较或运算,然后返回一个合适的结果类型,就非常有用。是一个模板结构体,它接受一个类型参数T,并通过::type成员来提供添加右值引用后的类型。
2025-03-14 22:52:37
659
1
原创 N皇后问题(位运算版本)
在一个 的国际象棋棋盘上放置 个皇后,使得任意两个皇后都不能处于同一行、同一列或同一斜线上。目标是找出所有满足该条件的皇后放置方案。时间复杂度是O(n!),对于n 乘 n的格子,每行都有n种选择,选择可能依次递减。同时要便随着大量剪枝。
2025-02-25 14:10:14
247
原创 嵌套类问题的递归解题套路
题目:给你一个字符串类型的表达式,例如:3 + (3 - 2 * 4 * (1 + 1) ),请问答案是多少。由简单到复杂,先看没有括号的情况下如何解决。
2025-02-24 20:27:09
500
原创 常见经典递归过程
汉诺塔问题通常有三根柱子(通常标记为 A、B、C)和若干个大小不同的圆盘,这些圆盘从大到小依次套在起始柱子(例如 A 柱)上,形成一个塔状。每次只能移动一个圆盘。任何时候都不能将较大的圆盘放在较小的圆盘上面。只能移动最上方的圆盘。
2025-02-14 17:53:48
861
原创 二叉树高频题目——下——不含树型dp
深度优先搜索和广度优先搜索在解决不同类型的问题时具有不同的优势和适用性。选择哪种算法取决于具体的问题和要求,例如是否需要最短路径、是否有环等因素。这两种算法都是基础且重要的数据结构和算法设计中的核心内容。结构特点每个节点最多有两个子节点,分别称为左子节点和右子节点。对于每个节点,其左子树中的所有节点的值都小于该节点的值。对于每个节点,其右子树中的所有节点的值都大于该节点的值。左右子树本身也是BST。排序性质中序遍历BST可以按照升序输出节点的值。
2025-01-26 23:53:33
1456
原创 Leetcode100热题——盛水最多容器
水量是由较短的边决定的,所以只需要尝试提高较短的一边。移动较长的边并不会带来任何好处,因为它的高度不会影响水量的增加。通过移动较短的边,我们有机会找到一个更高的线段,进而可能获得更大的水量。因此,总是移动较短的边,是因为它可能引导我们找到更大的水量,确保了算法的高效性和正确性。
2025-01-26 21:00:01
821
原创 我的创作纪念日——1/23
最初我认为计算机就是敲代码,但但我接触powershell,第一次通过一个个cmdlet去操纵电脑时,那种把玩玩具的喜悦产生,开始意识到计算机是个庞大的系统,我渴望能够不断地探索、汲取知识,最关键是真正用到现实、改变现实。而且当我回过头来看自己以前写的代码时,才是真正发现自己以前写的多么狗屎,也确确实实意识到自己在进步,让自己的努力得以直观感受到。
2025-01-25 23:50:51
236
原创 以往博客补充和复习——part2
利用分治思想,可以去看、递归函数学习 part1_输入正整数n(n<=20),利用递归法求n的阶乘-优快云博客有介绍矩阵幂。怎么说呢,我知道思路,但怎么用代码实现却不知道,这是coding能力。特别是递归函数,参数和返回值就是思考关键。关键是我写矩阵乘法,传入什么呢,有返回什么呢,看我典型错误,顾头不顾尾。没考虑到后面要用到修改后的变量。为什么我们要使用临时变量,就是覆盖原来的值。错误:正确: 如果给了二维数组,不想使用指针或转为指针,可以使用引用传递&。使用链表实现栈注意:最后使
2025-01-15 11:28:26
704
原创 以往博客的复习补充——part1
之前没更新是因为期末考试要复习,没空写博客。1月3号才考完,现在有空,打算从头看一遍,既是复习以前知识点,又是对原来的博客进行补充。刚好寒假,有大把时间。
2025-01-04 21:08:17
872
原创 二叉树高频题--part1(不含树型dp)
序列化(Serialization)是指将数据结构或对象转换为一种连续的字节流(byte stream)的过程,这样可以方便地存储或传输数据。反序列化(Deserialization)则是指将字节流转换回原始的数据结构或对象。在二叉树的序列化中,我们需要将二叉树的结构和节点值转换为一种连续的字节流。前序遍历序列化(Preorder Traversal):先访问根节点,然后递归地访问左子树和右子树。。层序遍历序列化。
2024-12-17 09:05:54
731
原创 数据结构的高频题
最大频率栈(Max Frequency Stack)是一种数据结构,它能够在栈中存储元素,并且能够高效地找到栈中出现频率最高的元素。最大频率栈通常使用一个哈希表(HashMap)和一个栈(Stack)来实现。哈希表用于存储每个元素的频率,而栈则用于存储元素本身。push(x): 将元素x推入栈中,并更新哈希表中的频率信息。pop(): 从栈中弹出一个元素,并更新哈希表中的频率信息。: 返回栈中出现频率最高的元素。初始化一个空栈和一个空哈希表。当元素x被推入栈中时:如果x不在哈希表中,添加。
2024-12-13 20:36:26
1036
1
原创 链表归并排序法
将链表切成两半,返回中间节点。使用快慢指针。为了严谨,要检查head是否为空,因为后面有slow->next,如果slow为空,就会报错。图片解释为什么可以让慢指针总是在while结束后指向n处节点。
2024-12-09 11:37:32
353
原创 链表高频题目和必备技巧
链表相交不是值相同,而是指的是结构相同,共用结构体。如果只是简单地判断是否相交,直接分别从各自地头节点开始遍历,判断最终的尾节点是否相同。注意:链表是否相同,并不是指的他们的值是否相同,而是指的是他们的内存地址是否相同。
2024-12-08 15:22:11
591
1
原创 位图的学习
位图是一种通过像素矩阵来表达图像的方式,适合存储高质量的图像,广泛应用于数字图像处理、网页设计、摄影等领域。它的文件大小较大,不适合于图像的频繁缩放,而矢量图则在这方面表现得更好。
2024-12-02 08:53:54
1290
原创 最长连续序列
给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。128. 最长连续序列4最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。9。
2024-11-30 14:31:32
299
原创 异或运算的骚操作
0 ⊕ 0 = 00 ⊕ 1 = 11 ⊕ 0 = 11 ⊕ 1 = 0可以看出,当两个位相同时,结果是0;当两个位不同时,结果是1。这个特性使得异或运算常被用来表示无进位相加。无进位相加:通过对每一位使用异或运算来实现,只关心每一位的结果,不处理进位。异或运算:是实现无进位相加的基础,它遵循的规则是:相同为0,不同为1。
2024-11-29 10:57:35
1057
原创 字母异位词分组
给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。strs =strs =[""][[""]]strs =["a"][["a"]]49. 字母异位词分组。
2024-11-28 16:47:39
747
原创 基数排序法
计数排序(Counting Sort)是一种非比较的排序算法,它通过统计数组中每个元素出现的次数来排序,适用于元素范围较小的情况。其主要思想是利用一个额外的计数数组,记录待排序元素的出现次数,然后通过累加计数数组中的值,确定每个元素在排序数组中的位置。
2024-11-28 08:14:34
840
1
原创 两数之和--leetcode100题
1. 两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。[1,2][0,1]
2024-11-26 15:09:22
435
原创 刷题记录一
在 并两个链表为一个链表时.不需要另建新表的结点空间,而只需将原来两个链表中结点之 间的关系解除腾重新按元素值非递减的关系将所有结点链接成一个链表即可。给定一个数组,要求对里面的数字进行减半操作,然后减半后的数字放回原数组,最后数组和等于原来数组的一半,问最小操作次数是多少。面对int类型数据做除法可能会损失部分精度,可以给int类型乘上10的n次方,给它10的倍数用以缓冲。其实不用再重新创建一个新的链表,直接将两个链表拆开,重新组合,即不使用new分配新内存。没有考虑直接算出逆序数,AI给的代码。
2024-11-25 17:49:32
405
原创 堆结构常见题
这是第一次写的,你能发现哪里有问题吗,就是比较器有问题,堆构造时默认是大根堆,如果是小于符号,意味着还是默认,所以排不对。我还一直纠结认为是下面插入节点部分出现了问题,有时需要自己去找出问题,要分部分去检查。有时可能不是你一直改的部分有错,而是其他部分。之前的归并排序就是这样,搞了我弄了一天。
2024-11-25 16:22:12
315
原创 随机选择算法
使用partition函数,先将数组分为三个区域,小于x的,等于x的和大于x的区域。虽然小于和大于区域的顺序不知道,但等于x的区域一定正确。因为partition函数返回等于区域的左右边界,如果索引i位于其中,就直接返回arr[i]
2024-11-21 08:59:11
315
原创 随机快速排序
快速排序关键就是选取基准值,遍历给定范围的数组,将小于等于的放到边界左边,大于的放到右边,同时标记基准值的位置,最后放到边界左边。所有我觉得AI给我的代码很蠢,选择给定数组里的最右边的元素,这成了固定流程,是考虑最差情。3,left和right的临时变量,来储存返回左右边界值,避免后序递归覆盖。三个条件语句写的太冗余,以后凡是涉及进行完操作后索引变化,考虑自增或自减。将排序数组分为三个区域,大于随机抽取的数字,等于的部分,小于的部分。当随机行为是算法的关键部分时,应当考虑期望值,而不是最坏情况。
2024-11-20 12:38:09
268
1
原创 归并分治法
归并分治法(Merge Sort)是一种基于(Divide and Conquer)思想的排序算法。它的基本原理是将一个大问题分解为若干个小问题,分别解决后再合并结果。归并分治法是一种稳定的排序算法,时间复杂度为,适合大规模数据的排序。
2024-11-19 16:40:40
436
原创 递归和master公式
递归函数的栈帧:每次递归调用会将该调用的局部变量、参数和返回地址等信息压入栈中,递归调用栈会不断增长。栈的展开与收缩:递归调用展开时,栈逐步增大;当递归返回时,栈逐步收缩,最终返回递归的最终结果。递归栈的限制:过深的递归会导致栈溢出,造成程序崩溃。
2024-11-18 08:22:19
745
原创 二叉树遍历的非递归实现和复杂度分析
我用自己的口水话解释一下:准备一个栈,从根节点开始,先判断栈是否为空,如果否,就弹出一个元素,对弹出元素进行自定义处理,再将它的左右子节点压入栈内,重复操作。因为是先序,所以弹出节点后应该先压入右节点,再是左节点。会发现在没有处理完左节点之前,右节点不会弹出。
2024-11-15 22:19:35
1365
1
原创 二叉树及其三种序的递归实现
一,递归序和递归理解#include<iostream>//递归的基础样例,用来理解递归。struct TreeNode{ int value; TreeNode* left; TreeNode* right;};void f(TreeNode* root){ if (root == NULL) return; //1 //当到达该节点时的操作。 f(root->left); //去遍历根节点的左子树。 //2 //遍历完左子树后进行的操作 f(ro
2024-11-14 17:16:31
760
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人