--每周分享--

分享内容:

1.单链表的归并排序

2.一道有趣的思考题

分享细节:

单链表的归并排序

主要思想:递归

怎么理解?下面具体说明:

1.首先,我从整体的思考步骤说明:先分区,再排序,最后合并

2.理解递归:递归什么?怎么递归?递归结束条件是什么?递归的返回值是什么?

递归什么:我们想要通过找中间值来不断的分割链表,既然需要不断地分割,那么就需要递归本身区找中间值分割链表。由于我们最初说“先分区,再排序,最后合并”,那么分区操作就得写在前面。

怎么递归:找到中间值,有两段链表,那么就需要调用两次函数,分别对两边的链表继续分割。这就要提到一个注意点:怎么断开?如果在数组中,我们直接就用索引,【左边,mid】【mid + 1,右边】,但是在链表中我们要让mid->next = NULL,让链表在mid处断开,因为:确保每个递归步骤都在将链表分割为较小的部分时维护链表的正确性。在递归过程中,排序的过程可能会受到影响,因为递归过程中会改变链表的连接关系。

递归结束条件是什么:分为一个结点时结束递归,开始合并。

递归的返回值就是合并后返回的链表头。

那么,其实从递归结束条件就可以知道:“分为一个结点时结束递归,开始合并。”,那么压根就不需要排序,为什么?因为每个结点已经成为一个结点了,其实就是一个个的有序链表。

上代码看一下:

Node* merge(Node* head1, Node* head2) {
	if (head1 == NULL) {
		return head2;
	}

	if (head2 == NULL) {
		return head1;
	}
	if (head1->data < head2->data) {
		head1->next = merge(head1->next, head2);
		return head1;
	}

	else {
		head2->next = merge(head1, head2->next);
		return head2;
	}

}

Node* rank_kuai(Node* head){
	if (head == NULL || head->next == NULL) {
		return head;
	}

	Node* low = head;
	Node* kuai = head->next;
	 Node* mid = NULL;
	 Node* mid_next = NULL;
	while (kuai != NULL && kuai->next != NULL) {
		low = low->next;
		kuai = kuai->next->next;
	}
	mid = low;
	mid_next = mid->next;
	mid->next = NULL;
	head = rank_kuai(head);
	mid_next = rank_kuai(mid_next);
	return merge(head,mid_next);

}
一道有趣的思考题

爬楼梯:

 可以大胆的想一想:(贪心)

我们想:上第n阶台阶其实就是第n-1阶台阶的上法 + 第n-2阶台阶的上法

怎么理解:其实很简单:第n-1阶台阶到最后一阶台阶和第n-2阶台阶到最后一阶台阶的最后一步不一样,那么他们之前所有的走法都不可能重复,所以直接相加即可。

那么,此时就是一道斐波那契数列的应用问题。

代码:

int climbStairs(int n) {
//贪心:
    //斐波那契数列的应用
    if(n == 1){
        return 1;
    }
    if(n == 2){
        return 2;
    }
    
    int f1 = 1,f2 = 2;
    int f3 = f1 + f2;
    while(n>3){
        f1 = f2;
        f2 = f3;
        f3 = f1 + f2;
        n--;
    }
    
    return f3;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游标的定义和类型

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 游标的基本概念 游标从字面上理解为游动的光标&#xff0c;可以使用 Excel 表格来想象游标的作用&#xff0c;游标指向每一行&#xff0c;通过游标访问每行数据。 在 Orac…

二维相位解包理论算法和软件【全文翻译- 菲林(Flynn)最小不连续性方法(4.5)】

4.5 菲林最小不连续性方法 在迄今为止对路径跟踪算法的讨论中,我们忽略了一种非常自然的方法,现在我们将对其进行描述。如果我们仔细观察图 4.42(a)中包裹相位数据中的条纹图案,就会发现 "条纹线 "或最亮像素和最暗像素之间的边界标志着从 0 到 2π 的过渡,它们…

【LAMMPS学习】八、基础知识(1.5) LAMMPS 库接口

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

react17中配置webpack:使用@代表src目录

在vue的项目中可以使用表示src目录&#xff0c;使用该符号表示绝对路径&#xff0c;那么在react中想要使用怎么办呢&#xff1f; 在react中使用表示src目录是需要在webpack中配置的&#xff0c;在核心模块node_modules-》react-scripts-》config-》webpack.config.js中搜索找到…

城市内涝与海绵城市规划设计中的水文水动力模拟

原文链接&#xff1a;城市内涝与海绵城市规划设计中的水文水动力模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601198&idx5&sn35b9e5e3961ea2f190f9742236a7217f&chksmfa820dc9cdf584df97633f64d19bdc3e5f7d1a5a85000c8f040e1953c51b9b39c87b5…

【Linux】Socket编程接口 | 实现简单的UDP网络程序

文章目录 一、预备知识理解源IP地址和目的IP地址理解源mac地址和目的mac地址认识端口号理解源端口号和目的端口号理解“端口号&#xff08;PORT&#xff09;”和“进程ID&#xff08;PID&#xff09;” 认识TCP和UDP协议TCP协议UDP协议 网络字节序为什么网络字节序采用的是大端…

华媒舍:7种方式,打造出旅游媒体套餐

现如今&#xff0c;伴随着旅游业发展与繁荣&#xff0c;更多旅游业发展从业人员越来越重视产品营销品牌基本建设&#xff0c;希望可以将自己的度假旅游产品和服务营销推广给更多的潜在用户。而建立一个优秀的旅游业发展媒体套餐内容品牌是吸引目标客户的重要步骤。下面我们就详…

6.3Python之字典的内置方法

1、创建字典 dict.fromkeys() &#xff1a;可将列表、元组、集合转为字典 knowledgeL [语文, 数学, 英语] scoresD1 dict.fromkeys(knowledgeL, 60) print(scoresD1) knowledgeT (Chinese, Math, English) scoresD2 dict.fromkeys(knowledgeT, 60) print(scoresD2) knowl…

用html写一个雨的特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雨特效</title><link rel"stylesheet" href"./style.css"> </head> <body> <div id"wrap-textu…

一文掌握 React 开发中的 JavaScript 基础知识

前端开发中JavaScript是基石。在 React 开发中掌握掌握基础的 JavaScript 方法将有助于编写出更加高效、可维护的 React 应用程序。 在 React 开发中使用 ES6 语法可以带来更简洁、可读性更强、功能更丰富,以及更好性能和社区支持等诸多好处。这有助于提高开发效率,并构建出更…

Stable Diffusion——SDXL Turbo让 AI 出图速度提高10倍

摘要 在本研究中&#xff0c;我们提出了一种名为对抗扩散蒸馏&#xff08;ADD&#xff09;的创新训练技术&#xff0c;它能够在1至4步的采样过程中&#xff0c;高效地对大规模基础图像扩散模型进行处理&#xff0c;同时保持图像的高质量。该方法巧妙地结合了分数蒸馏技术&…

【企业场景】设计模式重点解析

设计模式 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff1a; 我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;我们自己开发业务使用的设计模式。 在平时的业务开发中&#xff0c;其实真正使用设计模式的场景并不多&#xff0c;虽然设计号…

企业业务遇到CC攻击,为何让人如此头疼。

随着互联网的普及和应用&#xff0c;网络安全已经成为人们越来越关注的一个问题。 随着网络信息化不断发展&#xff0c;用户对网站体验有着更高的要求&#xff0c;在网络时代&#xff0c;网站的稳定性至关重要&#xff0c;活跃在网络中的恶意攻击者惯用各类攻击手段破坏网站的稳…

C# Solidworks二次开发:几何公差IGot相关操作API详解

大家好&#xff0c;今天要介绍的是关于几何公差IGot相关操作的API。 几何公差之前没有讲过&#xff0c;具体API如下面所示&#xff1a; &#xff08;1&#xff09;第一个为GetText&#xff0c;这个API的含义为获取此几何公差的指定文本部分&#xff0c;下面是官方的具体解释&…

每日OJ题_01背包①_牛客DP41 【模板】01背包(滚动数组优化)

目录 牛客DP41 【模板】01背包 问题一解析 问题二解析 解析代码 滚动数组优化代码 牛客DP41 【模板】01背包 【模板】01背包_牛客题霸_牛客网 #include <iostream> using namespace std;int main() {int a, b;while (cin >> a >> b) { // 注意 while 处…

智慧污水井物联网远程监控案例

智慧污水井物联网远程监控案例 在当今数字化转型的浪潮中&#xff0c;智慧水务已成为城市基础设施建设的重要组成部分。其中&#xff0c;基于物联网技术的智慧污水井远程监控系统以其高效、精准、实时的特性&#xff0c;在提升污水处理效能、保障城市水环境安全、实现精细化管…

Jmeter安装与测试

一&#xff1a;JMeter简介&#xff1a; JMeter&#xff0c;一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能 和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议的特点。 官方网站&#x…

利用虚拟机建ITtools

网上给的虚拟机多数都是VMX格式的封包&#xff0c;而我这次用的是ovf 我先把虚拟机在导出为ovf 生成了三个文件 去服务器上创建虚拟机&#xff0c;选择从OVF或OVA文件部署虚拟机&#xff0c;点下一页 给虚拟机起个名字 把相应的文件扡到里面去&#xff08;这里生成的四个文件中…

【软件使用-MEGA】基于NJ和ML方法构建进化树结果比较

文章目录 概要对比细节小结 概要 构建进化树有很多可选的算法&#xff0c;其中比较常用的NJ&#xff08;邻接法&#xff09;&#xff0c;也有基于似然法NL&#xff0c;如下图所示&#xff0c;构建进化树具体方法可以参考我之前写的【软件使用-MEGA】如何基于ML方法构建进化树 …

STM32笔记---CAN采样点设置和报错

STM32笔记---CAN采样点设置和报错 采样点设置再同步补偿宽度&#xff08;SJW&#xff09;设置 报错分析CAN中断使能寄存器CAN错误状态寄存器 采样点设置 以前配置CAN参数的BS1和BS2参数时认为总线波特率符合要求就可以了&#xff0c;其实同一个波特率可能对应多组参数设置的情…