- 博客(20)
- 收藏
- 关注
原创 排序(数据结构)
冒泡排序的思想是每次将最大的一下一下运到最右边,然后将最右边这个确定下来,再来确定第二大的,再确定第三大的…由于排序过程中,数字像冒泡泡一样从左往右换过去,故名冒泡排序。时间复杂度为O(n^2)。
2025-02-22 12:14:57
516
原创 位运算的技巧
按位异或运算符(^)用于对两个操作数的对应位进行逻辑异或操作,它的运算规则是,当两个位不同时,结果位为1,否则为0。因为x可能的输入值为负数,而负数为有符号数,右移过程中可能会有符号扩展的问题,为了避免这种情况,我们可以现将x转换成无符号数再进行查找。如果x = (010010),则lowbit(x) = (000010),常用于数据结构树状数组中。逆运算:x^y = z,则有z^y = x(两边同时异或y,抵消掉)将x的第i位或上1,则x[i]变为1,其他位或上0没有影响。交换律:x^y = y^x。
2025-02-18 23:31:28
862
原创 双指针...
双指针算法是一种常用的算法技巧,它通常用于在数组或字符串中进行快速查找、匹配、排序或移动操作。双指针并非真的用指针实现,一般用两个变量来表示下标(在后面都用指针表示)。双指针算法使用两个指针在数据结构上进行迭代,并根据问题的要求移动这些指针。双指针往往也和单调性、排序联系在一起,在数组的区间问题上,暴力法的时间复杂度往往是O(n^2)的,但是双指针利用单调性可以优化到O(n)。常见的双指针模型有:对撞指针、快慢指针。
2025-02-18 13:17:15
444
原创 反倍数问题
给定三个整数 a,b,c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。其中,1≤ n ≤ 1000000,1≤a≤n,1≤b≤n,1≤c≤n。第二行包含三个整数 a,b,c,相邻两个数之间用一个空格分隔。请问在 1 至 n 中有多少个反倍数。输出一行包含一个整数,表示答案。输入的第一行包含一个整数 n。
2025-02-07 11:43:09
261
原创 特别数的和
题目:小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。请问,在 1 到 n 中,所有这样的数的和是多少?
2025-02-07 10:39:43
385
原创 operator()
在c++中,operator()是用于重载函数调用运算符的语法,通过它定义的函数也被叫做函数调用运算符重载函数。使用该运算符重载的类或结构体的对象可像函数一样被调用,这样的对象被称为 “函数对象”(也叫 “仿函数”)。<3>适配算法和数据结构。<1>自定义排序规则。<2>封装可调用行为。
2025-02-02 18:28:01
493
原创 vector
元素添加和删除:可以使用push_back()函数在vector的末尾添加元素,使用pop_back()函数删除末尾的元素。还可以使用insert()函数在指定位置插入元素,使用erase()函数删除特定位置的元素。容器大小管理:可以使用size()函数获取vector中元素的数量,使用empty()函数检查vector是否为空。还可以使用resize()函数调整vector的大小。可以使用begin()函数获取指向第一个元素的迭代器,使用end()函数获取指向最后一个元素之后位置的迭代器。
2025-02-01 10:36:40
489
原创 c++中常用的库函数
函数的作用就是将给定序列转换为其字典序中的下一个排列。如果当前排列已经是字典序中的最后一个排列,该函数会将序列重置为字典序中的第一个排列(即元素按升序排列的排列),并返回。<2>memset(ptr,value,num)函数 ( 对于非字符类型的数组可能会产生未定义行为 )ptr指向要设置值的内存块的指针,value指要设置的值,通常是一个整数,num指要设置的字节数。可以把一个序列(如数组、向量、字符串等)中指定区间的元素顺序颠倒过来。否则,它会将序列转换为下一个排列,并返回。<3>swap()函数。
2025-01-24 17:24:58
677
原创 二分答案-“跳石头”问题
接下来N行,每行一个整数,第i行的整数Di(0<Di<L)表示第i块岩石与起点的距离。作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石)。输入文件第一行包含三个整数L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能。中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
2025-01-19 17:35:19
702
原创 二进制位运算的基本概念
1.规则:将两个操作数对应的二进制位进行逻辑或操作,只要两个对应的二进制位中有一个为1,结果位就为1,只有当两个都为0时,结果位才为0。1.规则:将两个操作数对应的二进制位进行逻辑与操作,只有当两个对应的二进制位都为1时,结果位才为1,否则为0。
2025-01-18 21:19:14
327
原创 C/C++基础之查找
传入参数为三个地址或者迭代器,其中b参数的元素将处于正确位置,其他位置元素的顺序可能是任意的,但前面的都比它小,后面的都比它大。min(a,b)返回a和b中较小的那个值,max(a,b)返回a和b中较大的那个值,这两个函数都只能传入两个值,或者传入一个列表。min_element(a,b)返回地址[a,b)中最小的那个值的地址(迭代器),传入参数两个地址或迭代器。max_element(a,b)返回地址[a,b)中最大的那个值的地址(迭代器),传入参数两个地址或迭代器。<1>min和max函数。
2025-01-17 17:06:55
249
原创 C/C++基础之sort排序
它提供了动态数组的功能,允许存储多个元素,并可以根据需要自动调整大小。vector<int>提供了begin和end迭代器可以方便对vector中的元素进行操作,代码中的sort(arr.begin(),arr.end(),Compare)就用到了。如果想使用数组的话需要使用sort(arr,arr+8,Compare)来调用sort函数,数组的大小需要提前确定,并且不能动态调整大小。sort(起始地址,结束地址的下一位,比较函数) 注:比较函数可写可不写。那么如何实现降序排序呢?
2025-01-16 12:26:33
335
原创 c/c++的基础语法(初学者)
cout使用<<运算符来连接要输出的对象,它的语法相对更灵活,更符合面向对象的编程风格,可以连续使用<<运算符来输出多个内容,包括字符串和变量,endl是一个操作符,用于换行,相当于\n。因为它使用>>运算符进行输入操作,编译器会根据变量的类型来调用相应的>>运算符重载版本,以确保输入的数据类型与接收变量的类型匹配。遍历string的方法包括循环遍历和auto枚举,这里解释一下auto枚举,当使用auto来声明一个枚举变量时,编译器会根据枚举类型是基础类型和初始化表达式来推断变量的类型。
2025-01-15 11:24:06
388
空空如也
c++中字符反转问题
2025-01-14
这个报错是什么原因,怎么修改
2024-11-27
编写代码实现关系矩阵的合成运算,我想问一下 我的代码怎么改?不用指针怎么写呢?
2024-04-09
我想请问一下为什么我的代码运行结果不正确?
2024-03-23
代码运行出来无结果请问如何修改代码?
2024-03-23
能看一下代码哪里出错了吗
2024-03-11
为什么运行结果出错了?
2024-03-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人