AI tools such as ChatGPT will disrupt hydrology, too
:root{--sf-img-23: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTcuNDA2IDcuODI4TDEyIDEyLjQyMmw0LjU5NC00LjU5NEwxOCA5 ...
【算法】插入排序与希尔排序的一些理解
本章讲解了插入排序与其升级版–希尔排序的主要思想与代码实现。
🤑插入排序
插入排序是最简单的一种排序方法,其本质就在于不断从后向前插入。
意思就是,将待排序序列的第一个当做有序序列,然后将第二个往前插入,要求升序则将两数中较小的那个排至最前面,降序则把较大的放在最前面。这样操作一次就把前两个数变成了一个有序数列,同理操作第三个数,第四个数·······直到将整个数列排列完成。
以下是一张动 ...
【算法】二叉树里的层序遍历与完全二叉树的判断
本篇文章主要是填上一篇的层序遍历的坑,具体的讲解层序遍历的代码实现与完全二叉树的判断。
💿思想
在之前就已经提到过,层序遍历就是一层一层的按顺序遍历,也是几种遍历中最简单明了的,但其实现相比于前序中序这种巧用递归思想的在代码书写中却要复杂不少。
给出一棵树:
我采取的办法是建立一个队列,然后将根节点进行入队,此时队伍里就只有根节点,将根节点出队,同时将其两个孩子按顺序入队。
之后要执行的 ...
【算法】链式二叉树里的遍历与分治思想
在上一篇里我讲到了使用数组来模拟二叉树,也就是物理结构虽然是动态开辟的数组,但其逻辑上我们却认为其是一棵二叉树,每个节点都与对应的节点有着父或者子的关系。这一篇使用的是链式存储的二叉树,使用结构体为每个节点开辟空间,讲解四种遍历,并使用到了分治的思想来求解二叉树的节点个数与高度等问题。
💑链式存储
定义一个结构体,其包含值(本章定位int),两个指针,分别指向其两个孩子,也可以没有指向,当 ...
【算法】堆和堆排序
📲堆
🏒概念
以下源自百度百科对堆的解释说明。
堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个结点的值总是不大于或不小于其父结点的值;
堆总是一棵完全二叉树。
将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆是非线性数据结构,相当于一维数组,有两个直接后 ...
【leetcode】设计循环队列
来源:622.设计循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为环形缓冲器。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如 ...
【leetcode】巧解深度拷贝“带随机指针”的链表
题目来源:leetcode 138.复制带随机指针的链表
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针 ...
【leetcode】双指针巧解判断链表是否有环的问题
本章讲述的例题来自leetcode 141.环形链表1,142.环形链表2,旨在利用双指针解决此类型的问题。
💻141.环形链表1
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表 ...
【算法】快速排序,归并排序,两种二分的模板干货讲解,附带边界问题的分析。
前言:本篇内容会总结快速排序与归并排序两种常见的排序以及整数二分,浮点数二分,并给出相应的模板代码与示例题目。在代码的讲解过程中也会附带讲解让人头疼的边界问题,到底如何划分区间,划分后又该如何设定参数。
📣快速排序
🥗 基本思想
快速排序的中心思想就是分治算法。其操作过程就是在区间上选定一个值,然后排序整个数组,使得值左边的都小于它,右边的都大于它,然后整个数组就被分成了两段,分治的思 ...
【c】简述内存中数据如何存储?动态内存该如何分配?
😍在本章的内容里会详细的介绍在c语言的程序中,整型int与浮点型float是如何进行存储的,以及动态分配的一些基础知识点。
🥕数据类型
数据类型在初始c语言的阶段就已经与大家见过面了。基本上可以分为以下几种基本的内置类型:
1234567char // 字符数据类型short // 短整型int // 整型long // 长整型long long// 更长的整型float // ...
【c】为啥有时传参要传指针?实参形参到底是个啥?栈帧和他俩到底啥关系?
前言:🎅想必在学习c的过程中,你可能产生过这样的疑惑,为什么在进行传参时总是会选择传入一个指针呢😟?例如你想完成一个add函数,其功能实现为c=a+b,但是在返回值为void的情况下传入a,b两个参数却改变不了c。也许老师给你解释的是形参是实参的拷贝,但你却不是很理解,也许你还遇到过这样的问题:1.局部变量是如何创建的?为何局部变量不初始化会出现随机值?2.在函数调用时参数如何传递?又以何种 ...