自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于 《二分》

二分思想:Aggressive cows 先假设木棍的最大长度的最小值为 mid;那么所有的比 mid 大的木棍都要进行切割 ( arr[ i ] - 1 ) / mid 的次数;接下来就是二分的问题:确定left与right 的范围: left == 0;如果 第一个mid 不成立的话,比所有 比mid 小的值 就一定都不成立;将牛舍的位置按照升序的方式进行排序。先假设 最大的两头牛之间最近的距离为mid, 那么第二头牛的位置应该满足 : Xi + mid < = Xj;

2022-10-19 00:02:26 215 1

原创 补题ing

因为当del数组为:del [ 1 0 0 0 -1 0 0 0 ],它表示的是: 0 ~ 4 的下标内已经放入了变量;当 occupy == 0 时 并且满足 sum[ index ] = sum[ index + size - 1 ] 时表示当前内存中的位置可以进行存储大小为 size 的新变量;例如 : 当 sum[ index ] = sum[ index + size - 1 ] 是表示该位置能进行存放大小为 size 的变量;

2022-10-17 23:26:27 390

原创 关于《前缀和》

如果用了前缀和:它的时间复杂度 为 max【 O(n),O(q)】,很明显前缀和能带来很多时间上的优化;因为他的 n 和 q 可以取的范围基本一样大;如果不用前缀和来写的话 它的时间复杂度应该是。如果你们有更好的见解,可以于我交流,我将虚心学习,洗耳恭听。这一题:就比较适合用前缀和来写 , 为什么呢?目前:我暂且认为前缀和适用于 优化时间的算法;最近又在刷一些前缀和的题;O( n * q);

2022-10-15 23:33:34 232

原创 关于KMP算法简单应用;

寻找子字符串的在主串中出现的次数;

2022-10-14 22:54:32 233

原创 动态规划 完全背包问题

求 X 元钱 可以买到的最大美味度的食物:(一种食物可以被购买多次);因为一开始忽略了这个条件 当成01 背包写的;比较简单的完全背包问题;

2022-10-14 15:16:34 222

原创 M.停电

M.停电。

2022-10-14 00:51:06 125

原创 关于 贪心 算法

此例题来自洛谷 P2859 [USACO06FEB]Stall Reservations S;每头奶牛的开始与结束时间 可以看成一个线段;求解当下线段重合部分的最大值;所谓贪心: 就是只管当下的最优解。

2022-10-14 00:20:25 125

原创 引用 内联 auto

【代码】引用 内联 auto。

2022-09-20 22:22:05 117

原创 【数据结构】快速排序

显然 这种交换排序的主要特点就是将值较大的记录向序列的尾部移动,值较小的记录向序列的前部移动;(升序,降序反之)。先分析单趟的排序;单躺的冒泡排序是将 最大的值放到数组的最后面,之后就不考虑这个最大的数了,而快速排序的单趟是将准备好的 key 值放到 适当的位置(排好序的位置);下面先来分析一下快速排序的单趟排序:用两个参数 left 与 right ,分别从数组的两边出发,right 找比 key 值小的,找到之后停下,left 找比 key 值大的,找到之后也停下,互换两个数的,循环直到left ==

2022-09-02 20:52:57 306

原创 【库函数】复习小结

1.sprintf函数作用为将整型转化为字符串类型 C 库函数int sprintf(char *str, const char *format, ...)发送格式化输出到str所指向的字符串。6.memcpy void *memcpy(void *str1, const void *str2, size_t n)从存储区str2复制n个字节到存储区str17.memmove void *memmove(void *str1, const void *str2, size_

2022-09-01 22:32:59 177 1

原创 【数据结构】希尔排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。将相同颜色的数字进行排序;然后对gap 进行修改,再重复进行预排序;插入排序 的时间复杂度 最大为O(n^2),最好为 O(n);分为两步:1.预排序 : 使数组接近有序 2. 直接插入排序;希尔排序的思想就是插入排序;...

2022-08-31 22:24:13 412 2

原创 【数据结构算法】动态规划之【单序列问题】

动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化递归,自底向上就是递推。使用动态规划解决的问题有个明显的特点,一旦一个子问题的求解得到结果,以后的计算过程就不会修改它,这样的特点叫做无后效性,求解问题的过程形成了一张有向无环图。动态规划只解决每个子问题一次,具有天然剪枝的功能,从而减少计算量。...

2022-08-25 18:12:49 701 3

原创 【数据结构算法】小结

寂寞如雪:首先就是一个截取的问题;怎么截取可以使得获得的能量最大;这里设计到一个动态规划中的转移思想;2.转移等下再说;先来分析一下如何对数据进行处理,准备一个数组,将 每一段 1 的个数 存起来;例如 :111001110001111; 数组中这样存:3 0 3 0 4;再对这个数组进行平方处理,偶数位赋予负值;为了方便偶数维赋予赋值 可以 在数组开头加上一个零 像这样: 0 90 90 16;这时只需要 当 i % 4 == 3 的时候乘于-13.这一步就是动态规划的了;求连续区间的最大值问题

2022-08-23 13:01:22 617 3

原创 【数据结构】二叉树的递归思想

所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。二叉树的遍历有 四种 方法,分别是 前序遍历 中序遍历 后续遍历 以及 层序遍历;1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。 ( 根 左子树 右子树 )2. 中序遍历(Inorder Traversal).

2022-08-15 16:42:28 390 6

原创 【数据结构】二叉树中 堆的实现方法

堆:有一组集合 的元素按照完全二叉树的顺序储存方式存储到一个一维数组中,根据存储的顺序不同分为小堆与大堆。

2022-08-08 23:01:35 421 27

原创 【数据结构】栈和队列

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。按图示来理解就是:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)(头删头插)入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。..

2022-08-07 18:33:46 1083 13

原创 【数据结构】链表OJ题

假想「乌龟」和「兔子」在链表上移动,「兔子」跑得快,「乌龟」跑得慢。当「乌龟」和「兔子」从链表上的同一个节点开始移动时,如果该链表中没有环,那么「兔子」将一直处于「乌龟」的前方;如果该链表中有环,那么「兔子」会先于「乌龟」进入环,并且一直在环内移动。等到「乌龟」进入环时,由于「兔子」的速度快,它一定会在某个时刻与乌龟相遇,即套了「乌龟」若干圈。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。本文的内容与链表有关,难度是递进的,前面几题 很简单 我就简单的一笔带过;...

2022-08-05 17:26:00 691 7

原创 单链表增删查找的实现

对比以上两种插入我们可以发现尾插的效率并没有头插的效率高。尾插需要遍历链表,时间复杂度尾O(N),而头插的时间复杂度为O(1);首先,我们想要进行插入就意味着我们先构造一个动态申请节点的函数;概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。3.从堆上申请的空间,是按照一定的策略分配的,两次申请的空间可能连续,也可能不连续。一个一个节点用指针连在一起就构成了我们的单链表;1.从图中可以看出,链式结构在逻辑上是连续的,但是在物理上不一定是连续的;...

2022-07-31 23:20:40 158 4

原创 顺序表的实现

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改(采用定长数组的形式进行存储)和(使用动态开辟的数组进行存储)静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表。...

2022-07-29 18:32:17 1855 10

原创 关于双指针的思想总结

最近再刷leetcode上的题目的时候我发现双指针的应用十分广泛。像反转数组反转字符串定点删除合并数组等等很多问题双指针真的很实用。

2022-07-28 19:19:58 191 16

原创 3种方法解轮转数组

kk例如输入输出解释向右轮转1步向右轮转2步向右轮转3步我想到的第一种方法就是暴力选择时间复杂度O(k*N)当没有明确说明k的值根据最坏情况原则它的时间复杂度应为O(N^2)那么结果毫无悬念结果又超出了时间的限制。下面是我的代码简单易于理解就不多解释了;...

2022-07-27 22:10:47 575 1

原创 有关字符串的题目总结

题目链接 点这里题目描述:将一句话的单词进行倒置,标点不倒置。比如 "I like beijing.",经过处理后变为:"beijing. like I"。最初我遇到 这题的时候 感觉束手无策 不知道怎么下手;而且我还用到了 scanf 这个函数 却发现 scanf 读到 空格 就不读了;我经过调试之后才发现的,所以 我们改用 gets 这个函数。首先 我的主要思想是 倒着遍历 打印字符串 上代码2.看看他人的思路:这个思路分为两步 1. 把整个字符串先逆序一遍

2022-07-22 15:47:53 106 2

原创 动态内存开辟

动态内存开辟上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。动态内存的函数 malloc free realloc calloc常见的动态内存错误...

2022-07-20 09:43:34 858 14

原创 枚举 联合

枚举顾名思义就是一一列举。把可能的取值一一列举。为什么使用枚举?我们明明可以用#define来定义常量, 秉承着存在即合理的原则,那么它又哪些优点呢?枚举的优点:1. 增加代码的可读性和可维护性2. 和#define定义的标识符比较枚举有类型检查,更加严谨。3. 防止了命名污染(封装)4. 便于调试5. 使用方便,一次可以定义多个常量联合(共用体)联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。...

2022-07-19 09:36:43 144

原创 leetcode 面试题 05.06. 整数转换

是先a*bc*de*f之后再加一起还是a*b,c*d,a*b+c*d,e*f,a*b+c*d+e*f。但是我们要知道如果有一天有一个代码你虽然知道他们之间的运算优先级,但是不知道他们之间是怎么进行运算的,像这样。这是我一开始写的带码写完的时候,我还在洋洋得意觉得太简单了,但是运行完就打脸了;如果我们遇到这样的代码a*b+c*d+e*f。函数的调用先后顺序无法通过操作符的优先级确定。...

2022-07-18 09:04:55 200

转载 645. 错误的集合

题目描述首先一开始我是怎么做的呢?我利用for循环遍历写了一大堆,重复测试,最后终于写好了我开始运行;结果我运行的时候他告诉我我超出时间限制我giao,我真的会谢。以上仅供娱乐;下面是正解;这只是一种解法还有一个位运算的方法提到运算符,我们要先熟悉掌握位操作符的使用&按位与|按位或^按位异或(注他们的操作数必须是整数。)...

2022-07-16 14:37:37 137

原创 【C语言通讯录】

要想实现一个通讯录,首先,我们要知道 我们要想实现的是通讯录都有哪些功能,首先 要思考这个通讯录 是干什么的,最关键的是——存放显示联系人;存放显示它的姓名;年龄;性别;地址;还有 电话号码;没有电话号码;怎么练习别人呢;怎么能叫通讯录呢?除了存放显示联系人 我们还要有最起码的 增删查找改;最后我们还希望能有一个 排序的功能。知道了这么多,我们就有了 一个大致的方向了首先要有个简易的初始界面 像这样:以下是运行结果:这样我们就已经完成了第一步;这第二步呢 就是创建变量 ;我们用结构体来创建变量比较方

2022-07-15 08:02:35 780 13

转载 模拟库函数

2. strcpy char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。3.strcat char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。my_strcat(arr1, arr1); 自己给自己追加不行 会有bug 要注意

2022-07-12 16:33:33 115 11

原创 硬核结构体,暴力解读

说到结构体:首先我们应该知道什么是 结构结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 学习结构体,首先我们要知道 结构体是怎么声明的。下面来看结构体的两种声明方式3.结构体变量的定义和初始化3.1结构体嵌套初始化4.结构体内存对齐当我们熟悉了结构体的基本使用,再向深层次考虑结构体的大小结构体的对齐规则:......

2022-07-11 22:27:11 294 4

空空如也

空空如也

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

TA关注的人

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