自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 二叉树遍历习题

思路:需要找到根节点到叶节点的路劲和为taget的数组,那么我们使用前中后序遍历都是一样的,因为不需要对中进行处理。root遍历到根节点就停止,然后来判断sum是不是和target相等。每次判断左右是否为空,不为空就把值带入到sum里(简化回溯的思想)root根节点 sum每次累加的和 tager目标值。

2024-03-26 15:29:43 862

原创 对称二叉树习题

首先需要确定遍历的方式,如果要判断是不是对称二叉树,需要判断对称二叉树的孙子节点是不是对称才可以,意思就是需要我们收集到子节点的信息并且返回给父节点,才可以判断是不是对称二叉树。参数为左右节点(如果传入一个头结点的话,既要判断左右儿子的情况,还要判断左右儿子的儿子情况太复杂了) left right。左右节点为空,或者一个为空,或者全为空,或者左右节点的值不一样都结束。左:调用递归函数判断左的左孩子 右的右孩子。右:调用递归函数判断左的右孩子 右的左孩子。//3.确定单层循环的逻辑。//2.确定终止条件。

2024-03-25 10:25:10 190

原创 链表相关习题

注意:一般while循环里的条件,cur->next->next如果想要程序正常运行,就必须满足cur和cur->next都不是空指针,但是cur->next->next可以是空指针,因为没有对他进行使用。//记录下一个节点后需要换位的结。while (cur) {//当cur为nullptr时,就不需要和前者有联系了,因为前者就是头结点啊。i++) {//找到left左边的一个节点。

2024-03-17 18:15:31 804 1

原创 位运算实现加减乘除

判断x1>=x2*2^i,如果满足这个条件,就证明结果的i位置肯定是1,所以让x1减去这个数后,继续判断下一个,直到i=0为止。if(a==INT_MIN)//因为a太小了,给他加上b就不会那么小了,最终结果+1即可。//当a或者b是整数最小值的时候,就不能进行除法运算,因为会导致溢出现象导致答案错误。利用每一步无进位相加的结果+进位的结果不停的计算,直到进位消失.利用加法,加上x2的相反数即可。

2024-03-16 13:46:17 379 1

原创 位图及习题

注意,在结果字符串中,第 i 个下标处的字符应该与 Bitset 中的第 i 位一致。//检查 Bitset 中 每一位 的值是否都是 1。//翻转 Bitset 中每一位上的值。概念:一个int(整型)有32位,那么就可以表示0到31的数字,那个位置为1,就代表存在那个值。//将下标为 idx 的位上的值更新为 1。//将下标为 idx 的位上的值更新为 0。//把每一位向右运动到第一位,然后&1,为0就证明这位就是0,加到str中。//返回 Bitset 中值为 1 的位的 总数。

2024-03-15 08:00:00 1489 1

原创 位运算及习题

思路:如果left小于right的情况下,right的最右边为1的位,可能就不能留住的,因为他的下一个肯定就是0了,&操作就会成0,同理,直接减掉最右边为1的位后,继续找下一个为1的位,直到left不小于right就返回right。思路:给这个数减去1(为了防止这个数本来就是n的次幂),给他的首位>>1,然后|操作,肯定他的第一和第二位都是1了,同理直到。16,这样即使有32位都可以满足这个操作,使他现在是全1,再返回加1的值,正好就是最接近且大于他的2的次幂了。找到n的最右为1的位,判断是不是原数即可。

2024-03-14 08:00:00 680

原创 异或运算及习题

思路:如果很多数字都出现了m次,只有一个数字少于m次,那么所有数字的每一位中如果有1,那么这个1出现肯定是m的正数倍,否则这个数一定是少于m次的,至于0就不需要判断了,因为没有1的位置就只能填0了。思路:找到两数相减后的符号,然后是正数就证明前者大,所以应该返回前者,又因为正数的第32位是0,异或后就为1可以进行乘法运算。//注意:当交换数组arr[i]和arr[j]时,i=j就会报错,在一个内存一直异或就会返回0。4.数组中1种数出现了奇数次,其他的数都出现了偶数次,返回出现了奇数次的数。

2024-03-13 10:55:46 1687

原创 优先队列及习题

运用创建小堆的思想,创建一个小堆,然后把数组的每个元素的第一个节点的值放入堆中,那么最小值就是堆顶的数,此时取出该节点,如果存入该节点的下一个节点的值,在向下排序,找到下一个最小值,直到整个数组遍历结束。minheap.empty())//如果minheap是空的,会返回ans=nullptr。proirity_queue<类型,容器,比较方式>//判断节点是否存在。//创建一个优先队列。//或者使用编译器自带的比较函数。//或者使用编译器自带的比较函数。//设置优先队列的规则。//以val的值来建小堆。

2024-03-12 08:33:34 376 1

原创 堆结构和堆排序

/堆排序:每次把堆顶的数和数组的最后交换,因为对顶可能是数组的最大值,然后在对堆0处向下调整。//建大堆的另一种方式,就是从下往上建堆,因为越到后面,左右孩子就越多。//反而heapify遍历越快,约到上面越多,时间复杂度为O(N)//向下调整,设当前heap的大小为size,i为当前调整的位置。//正常建一个大堆,时间复杂度O(N*logN)//两种排序的时间复杂度都是O(n*logn)//先找到两个儿子里的最大值。//根据堆的特性进行排序。时间复杂度为 O(N*logN)//在i的位置向上调整。

2024-03-11 10:52:24 361 1

原创 随机快排和习题

思路:使用按照随机快排的方式,先随机一个数组的下标x,对其进行排序,再根据small-1和big+1的位置,查找是否x已经在范围内,如果不在就在对应一侧进行相同操作即可。//给x对应的值进行排序。//设置全局区的静态变量,来定义排序x的位置后,在快排时的左右边界。

2024-03-10 10:26:48 857 1

原创 归并排序算法

归并排序的时间复杂度为O(N*longN)优点:直接排序需要每次找到数组里最大的数放在最后边,其次是n-1.。。。相当于每次都遍历了一次数组,浪费时间。归并排序,相当于只遍历了一次数组,step以2倍的速度变化时间复杂度为longN。

2024-03-09 11:10:25 354 1

原创 二分答案法解决问题

随着二分法的进行,每次mid下最少需要的粉刷匠的值就可以使用函数f得到,如果数量比k大,则粉刷匠刷的墙比mid小的,就会完不成任务,则需要刷的墙面数量要比mid个多。思路:找第k小的数组对距离,因为当数组很大的时候,对数组差进行排序显然效率很低,转换思路,找数组差为x的时候,有多少对数组满足小于k对的,当x的值变化时,数组对数也单调变化。if (needk > (long)h)//该速度下,需要的时间大于h,说明速度太小了,所以mid前面的值都不可取,给右侧二分。//计算在mid的速度下,吃完需要多久。

2024-03-07 16:59:36 1554

原创 二分查找常见思路

int left=0;//三种方式都是求中间值的,但是第一种当左右值大小上亿的时候可能会使内存不够,二三方式没有该问题//判断是否小于中间值,如果小于,则num肯定在mid前面}//判断是否大于中间值,如果大于,则num肯定在mid后面left=mid+1;}//找到numelsereturn mid;

2024-03-06 14:05:56 359

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除