![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构、刷题
主要是各种程序题目
Adward.xi
上下索取
展开
-
数据结构-位运算总结
191. 位1的个数 - 力扣(LeetCode)有两种写法:1.是把该数不断的去与0x1相与,得到该数的最后一位的值,然后判断他是不是1,再把该数更新一下整体往后移动一位也就是右移一位。return res;当一个数被减1时,它最右边的那个值为1的bit将变为0,同时其右边的所有的bit都会变成1。每次执行x&(x-1)的作用是把ⅹ对应的二进制数中的最后一位1去掉。原创 2024-08-11 18:53:05 · 244 阅读 · 0 评论 -
初始化二维vector
这里是我遇到的一些对于二维vector容器初始化的一些问题的总结与记录,一共有一下四种情况,随时添加新的方式方法。原创 2024-08-10 19:26:54 · 337 阅读 · 0 评论 -
数据结构一排序算法
冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序;原创 2024-08-08 16:04:07 · 663 阅读 · 0 评论 -
动态规划中01背包问题
我们先来理解倒序遍历,从最后一个元素往前看,看到的都是“上一层的元素”然后每遍历到一个元素,就把当前元素赋值成“当前层”的。这样得到的背包,因为每个元素加上的都是上一层的对应的物品value,所以不会重复。倒序的时候左边元素再刷新前都是上一层的数据,但正序就不一样了,正序的时候,左边的元素刚刚刷新过,也就是左边的元素已经是本层的了,意味着什么 这样会导致一个物品反复加好几次。,所以这里可以从左到右来更新背包的容量,因为之前的值都已经好好的存储好了不会在改变。表容量为j的背包,所背的物品价值可以最大为。原创 2024-07-13 14:15:59 · 435 阅读 · 0 评论 -
isdigit和isalnum
函数可以用于判断一个字符是否为数字,但是要注意它只能检查单个字符,不能判断整个字符串是否为数字。它接受一个字符作为参数,如果这个字符是数字字符(0-9),则返回非零值(通常是1),否则返回0。函数是 C++ 标准库中的一个函数,用于检查字符是否为字母或数字。是 C++ 中的一个函数,用于检查一个字符是否为数字字符。函数对所有大写和小写字母以及数字返回。因为字符 ‘7’ 是数字字符。原创 2024-07-12 23:11:37 · 230 阅读 · 0 评论 -
reverse函数讲解
是一个非常有用的函数,可以在需要反转容器或数组中的元素顺序时使用。它简单、高效,并且与C++标准库中的其他算法函数一样易于使用。原创 2024-07-12 23:09:55 · 655 阅读 · 0 评论 -
cin和getline的区别
cin读取单个单词getline读取一整行。cin跳过空白字符getline保留空白字符。cin用于简单输入getline用于需要读取包含空格的字符串或整行输入的情况。通过理解这两者的区别,可以根据具体需求选择合适的输入方式。原创 2024-07-12 23:06:51 · 208 阅读 · 0 评论 -
getline函数讲解
这里的参数char* s是输入的字符串变量, n是输入字符串的字符个数(第n个补’\0’),这个类的一个函数,所在的命名空间是std,因此,输入的时候要写成。是string流的函数,只能用于string类型的输入操作。是std流的函数,用于char*类型的输入操作。则会在输入空格时自动结束输入。所代表的字符就终止输入。是用来存字符的变量名,是输入终止条件,即遇到。是结束标志,此处作用与。原创 2024-07-12 23:05:31 · 194 阅读 · 0 评论 -
C++的priority_queue讲解
优先队列(priority queue)是一种特殊的队列数据结构,其中每个元素都有一个与之相关的优先级。在优先队列中,总是优先处理优先级最高的元素,而不是按照元素插入队列的顺序进行处理。在C++标准库中,是一种容器适配器,提供常用的优先队列功能。通常使用堆数据结构实现,以确保插入和删除操作的高效性。基本定义默认是使用大顶堆的,即队首总是最大的元素//储存int型数据//储存double型数据//储存string型数据priority_queue q;//储存结构体或者类。原创 2024-07-12 23:03:50 · 398 阅读 · 0 评论 -
stringstream类讲解
和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以为主,介绍流的输入和输出操作。主要用来进行数据类型转换,由于 使用 string 对象来代替字符数组(snprintf方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换, 更加安全、自动和直接。原创 2024-07-12 22:54:01 · 1869 阅读 · 0 评论 -
剑指offer面试题34:在二叉树中和为某一值的路径
满足就加入最终的容器中,然后注意这里要对加入的值进行一个删除,达到回溯的目的。容器中,然后当到达了叶子结点就判断容器中的值是否满足。就是用深度优先遍历,直接将路径上的值存在一个。路径总和等于给定目标和的路径。是指没有子节点的节点。原创 2024-03-12 10:53:58 · 272 阅读 · 0 评论 -
剑指offer面试题32:从上到下打印二叉树
每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾,接下来到队列的头部取出最早进入队列的节点,重复前面打印操作,直到队列中的元素全部打印完了。请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二次按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行一次类推。从上到下按照层打印二叉树,同一层的节点按照从左到右的顺序打印,每一层打印到一个容器里。从上到下打印出二叉树的每个节点,通一层的节点按照从左到右的顺序打印。如何广度优先遍历一幅有向图?原创 2024-03-11 15:57:48 · 412 阅读 · 0 评论 -
剑指offer面试题31:栈的压入、弹出序列
这个题目我们可以模拟整个入栈和出栈的操作,我们按照建立一个栈,按照pushed序列压入栈,并且判断是否与popped序列的首元素是否相同,如果相同就把这个元素从栈内弹出,并观察下一个popped元素判断与现在的栈元素首元素是否相同,如果是则循环操作,直到遇到与栈首元素不同或者栈为空时退出循环,继续在外边接着上面pushed序列压入剩余元素,等遍历完所有pushed元素后,如果两个序列相互匹配的话就栈内为空,否则就不为空。两个序列,每个序列中的。原创 2024-03-11 15:57:18 · 414 阅读 · 0 评论 -
剑指offer面试题28:对称的二叉树
1.中序遍历是左中右,所以初步想法是使用中序遍历把二叉树遍历一遍添加到容器中,这时候要把空着的节点以null的形式添加进容器,针对这种。2.书中的想法是使用迭代的思路,将比较左右两个节点,判断他们的情况一共有四种情况,都为空。树结构,然后把容器分为两段比较他们的值,从而得出是否是对称二叉树。,值一样则继续判断左节点的左子节点与右节点的右子节点情况。左节点的右子节点与右节点的左子节点情况。请设计一个函数判断一棵二叉树是否。,一个为空一个不为空。原创 2024-03-01 20:16:51 · 405 阅读 · 0 评论 -
剑指offer面试题22:链表中倒数第k个节点
2、我们还可以设置两个指针都同时指向头结点,第一个指针先走k-1步然后第二个指针开始跟第一个指针一起向后遍历,当第一个指针遍历到最后一个元素时,第二个指针就是指向的倒数第k个节点。1、求倒数第k个节点的值,我们归纳出当总共有n个节点时,倒数第k个节点就相当于从头开始的第n-k+1个节点。此方式要遍历两次链表第一次求出链表总数,第二次才能解出倒数第k个节点。实现一种算法,找出单向链表中倒数第 k 个节点。以下情况会导致代码崩溃,需要考虑。2.考察所写代码的鲁棒性。原创 2024-03-01 20:15:20 · 302 阅读 · 0 评论 -
剑指offer面试题16:数值的整数次方
同时这个代码可以优化,比如求一个数的16次方,上面的做法是从1到16依次来做,但是在这个过成中已经产生了8次方,我只要把这个8次方的数在两两相乘就可以得到16次方,这里需要考虑奇偶性。要权全面考虑输入的所有情况,输入的指数可能大于1,小于1或者是零和负数。不得使用库函数,同时不需要考虑大数问题。这里最容易出错的地方就是没有考虑到。原创 2024-01-10 20:07:19 · 349 阅读 · 1 评论 -
剑指offer面试题15:二进制中1的个数
针对这个问题,我们不右移输入的数字n。:这个方法思路是:先判断整数二进制中最右边一位是不是1;接着把输入的整数右移一位,此时原来处于从右边数起的第二位被转移到了最右边,在判断是不是1,这样每次移动一位,直到整数变为0为止。:在右移处理最左边的数字时:当位无符号数时,则用0填补最左边的n位;如果是有符号数时,则用数字的符号位填补最左边的n位,即填补n个1,请实现一个函数,输入一个整数,输出该数二进制表示中。所以上面的程序当输入的是一个负数例如。,则运算的最后结果为。原创 2024-01-09 17:17:30 · 375 阅读 · 0 评论 -
剑指offer面试题14:剪绳子
1.可以将这个问题看成为一个动态规划问题,我们现在求的是剪成为m段,得到的最大乘积。2.就是使用贪心算法,每一步裁剪的都是一个最优解,那么整体他就是一个最优,从局部最优推导出全局最优,当n>=5时,我们尽可能多地去剪长度为3的绳子;当剩下的绳子长度为4,就把绳子剪成两段长度为2的绳子,这样就可以得到最大乘积。例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。是顺序递增的,这意味着计算的顺序是自下而上的。的绳子,请把绳子剪成整数长的。),每段绳子的长度记为。原创 2024-01-08 19:50:35 · 377 阅读 · 0 评论 -
剑指offer面试题13:机器人的运动范围
这个题目类与之前的题目类似,就是起点是 [0, 0],判断当前点能够进入然后再遍历四周的点,每次移动到四周点时再将该点作为起点即可,也是一个回溯问题。的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于。例如,当k为18时,机器人能够进入方格。请问该机器人能够到达多少个格子?原创 2024-01-07 16:51:31 · 415 阅读 · 0 评论 -
剑指offer面试题12:矩阵中的路径
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。这是一个经典的回溯算法题目,可以使用回溯遍历出说有的结果,找到直到找到符合结果的路径。原创 2024-01-06 17:26:00 · 321 阅读 · 0 评论 -
剑指offer面试题10:斐波那契数列
但是使用递归的方式的话就会产生很多重复节点的运算就可以看成两边子树有很多重复的部分多计算了,这也就意味着计算量会随着n的增大而急剧增大,并且可能还有栈溢出的情况产生。先是简单情况,当只有一阶楼梯那么,只有一种方法,当有两阶楼梯那么就有2种方法。阶楼梯,第一次跳的时候就有两种选择:一是第一次就只跳1级,此时跳法数目等于后面剩下的。这个也可以用动态规划的思路:也就是现在的状态可以由前面的状态推导出来。可以使用递归的方式实现这个,也可以使用循环的方式实现它。因此,n级楼梯的不同跳法就是这两个的和为。原创 2024-01-05 14:33:05 · 366 阅读 · 0 评论 -
剑指offer面试题11:旋转数组的最小数字
就是利用二分查找的思路,我们用两个指针分别指向数组的第一个元素和最后一个元素,按照题目中的规则,第一个元素应该是大于或者等于最后一个元素。所以不管是移动左边界还是有边界,查找范围都会缩小到原来的一半,接下来在用更新之后的两个指针重复做新的一轮的查找。},这样的话就不能判断最小元素是在指针的左边还是右边的在这个区间内进行顺序搜索。,此时数组中最小元素应该位于该中间元素的右边,缩小寻找范围。,此时数组中最小元素应该位于该中间元素的左边,缩小寻找范围。,最小值就在该区间内。的数组,预先按照升序排列,经由。原创 2024-01-05 14:32:14 · 813 阅读 · 0 评论 -
剑指offer面试题9:用两个栈实现队列
剑指offer面试题9:用两个栈实现队列原创 2024-01-02 13:21:48 · 334 阅读 · 0 评论 -
剑指offer面试题8:二叉树的下一个节点
面试题8:二叉树的下一个节点原创 2024-01-01 18:33:31 · 309 阅读 · 0 评论 -
剑指offer面试题7:重建二叉树
剑指offer面试题7:重建二叉树原创 2023-12-30 18:12:58 · 398 阅读 · 0 评论 -
剑指offer面试题6:从尾到头打印链表
剑指offer面试题6:从尾到头打印链表原创 2023-12-29 15:22:47 · 424 阅读 · 0 评论 -
剑指offer面试题5:替换空格
剑指offer面试题5:替换空格原创 2023-12-28 13:28:31 · 365 阅读 · 0 评论 -
剑指offer面试题4:二维数组中的查找
剑指offer中二维数组中的查找原创 2023-12-22 13:29:29 · 328 阅读 · 1 评论 -
剑指offer面试题3:数组中重复的数字
剑指offer:中数组重复的数字题目原创 2023-12-22 13:26:39 · 333 阅读 · 0 评论 -
剑指offer:赋值运算符函数
赋值运算符题目原创 2023-12-21 21:44:55 · 338 阅读 · 0 评论