- 博客(28)
- 收藏
- 关注
原创 『深度编码』C++中的四种构造函数
C++构造函数类型及特点:1)默认构造函数用于无参数初始化;2)带参数构造函数实现灵活初始化;3)拷贝构造函数复制对象状态;4)移动构造函数(C++11)高效转移资源。编译器有自动生成规则,默认执行浅拷贝/移动,显式定义会覆盖默认行为。移动构造需配合右值引用,能提升临时对象处理效率。
2025-10-21 22:38:48
400
原创 算法-每日一题(DAY18)多数元素
本文介绍了如何找出数组中出现次数超过一半的多数元素。主要采用摩尔投票算法,通过元素抵消策略在O(n)时间复杂度和O(1)空间复杂度下高效解决问题。算法维护候选元素和计数器,遍历数组时进行动态更新,最终候选元素即为答案。此外还介绍了哈希表法和排序法两种替代方案:哈希表法通过记录元素出现次数实现,时间复杂度O(n)但空间复杂度O(n);排序法则利用众数必位于排序后数组中间的特性,时间复杂度O(nlogn)。三种方法各有优劣,摩尔投票算法在保证多数元素存在的前提下最具效率优势。
2025-10-21 22:02:29
1170
原创 算法-每日一题(DAY17)执行操作后的变量值
这篇文章介绍了一个编程问题,要求计算变量X在执行一系列操作后的最终值。问题给出了四种操作类型(++X、X++、--X、X--),初始值为0。通过遍历操作数组,根据操作类型对X进行加减处理。示例演示了具体运算过程,时间复杂度为O(n),空间复杂度为O(1)。最终返回X的值即为所有操作执行后的结果。
2025-10-20 19:12:50
406
原创 算法-每日一题(DAY16)合并两个有序数组
摘要: 题目要求合并两个非递减排序的数组nums1和nums2,结果存储在nums1中。采用双指针法,从后往前遍历两数组,比较元素大小,将较大者依次放入nums1末尾。通过指针m和n分别标记两数组有效元素的末尾,逐步填充nums1的剩余空间,确保合并后仍有序。时间复杂度为O(m+n),空间复杂度为O(1)。示例演示了合并[1,3,5]和[2,4,6]为[1,2,3,4,5,6]的过程。
2025-10-18 14:20:08
933
原创 算法-每日一题(DAY15)用队列实现栈
摘要: 本文介绍了如何使用两个队列实现栈(LIFO)结构,支持push、pop、top和empty操作。核心思路是:push时直接入队q1;pop时将q1前n-1个元素转移到q2,弹出剩余元素后交换队列;top直接访问q1尾部;empty检查q1是否为空。时间复杂度上,push、top、empty为O(1),pop为O(n);空间复杂度为O(n)。通过双队列的协作,高效模拟了栈的后进先出特性。
2025-08-26 21:13:54
1205
原创 『深度编码』操作系统-进程之间的通信方法
进程是操作系统中资源分配和任务调度的基本单位,进程间通信(IPC)机制使独立进程能够交换数据。常见的IPC方式包括:1)管道-半双工通信,分为匿名管道(父子进程)和命名管道(任意进程);2)信号量-通过计数器控制共享资源访问,需注意死锁风险;3)信号-异步通知机制,开销最小但功能有限;4)共享内存-最高效的方式,需配合同步机制使用;5)消息队列-支持消息类型分类和优先级;6)套接字-支持跨设备通信,分TCP(可靠)和UDP(高效)两种。每种机制各有特点,适用于不同场景。
2025-08-24 23:59:09
905
原创 算法-每日一题(DAY14)有效的括号
摘要: 题目要求判断由'()[]{}'组成的字符串是否有效(括号正确闭合)。使用栈结构处理:遇到左括号入栈,遇到右括号时检查栈顶是否匹配。匹配则弹栈,否则返回false。最终栈空则返回true。时间复杂度O(n),空间复杂度O(n)。示例演算展示了有效串"([{}])"和无效串"([)]"的处理过程,边缘情况(如空串、单字符)也需特殊处理。
2025-08-22 17:06:32
827
原创 『深度编码』C++中编译器会为类生成哪些函数
C++编译器会自动为类生成8种默认函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符等,以简化代码编写并确保对象基本功能。这些默认函数执行浅拷贝操作,适用于简单数据类型,但对于包含指针或需资源管理的类,需自定义实现以避免内存泄漏等问题。默认行为在无特殊需求时可满足基本功能,但有复杂资源管理时需要手动重载这些函数。
2025-08-21 18:45:57
1207
原创 算法-每日一题(DAY13)两数之和
摘要: 题目要求在整数数组中找到两个数之和等于目标值的索引。暴力解法使用双重循环遍历所有可能组合,时间复杂度O(n²)。优化解法利用哈希表存储元素值及其索引,通过查找补数(target-nums[i])将时间复杂度降至O(n)。示例演示了哈希解法的工作流程:当nums=[2,7,11,15],target=9时,补数7在字典中找到键2,返回索引[0,1]。两种解法均确保结果唯一,但哈希法以空间换时间更高效。
2025-08-18 23:59:06
1334
原创 『深度编码』C++中的内存分区
C++程序内存管理主要分为五个区域:栈区自动管理局部变量和函数调用信息,速度快但空间有限;堆区提供动态内存分配,需手动管理,空间大但易产生碎片和泄漏;静态存储区保存全局和静态变量,生命周期长但不够灵活;常量存储区存放不可修改数据,安全但缺乏灵活性;代码区存储可执行指令,为只读共享区域。各区域各有特点,合理使用才能确保程序高效稳定运行。
2025-07-03 00:40:16
1124
原创 算法-每日一题(DAY12)最长和谐子序列
摘要:题目要求在数组中找到最长和谐子序列(最大值与最小值差为1)。哈希表解法统计元素频率,遍历检查相邻数字组合,时间复杂度O(n),空间复杂度O(n)。双指针解法先排序,用滑动窗口寻找满足条件的子序列。两种方法各有优势,哈希表时间高效,双指针空间高效。示例输入[1,3,2,2,5,2,3,7]的最长和谐子序列为[3,2,2,2,3],长度5。
2025-07-01 21:03:32
863
原创 『深度编码』C++中的参数传递
C++函数参数传递有三种方式:值传递仅传递副本,不影响原变量;指针传递通过地址直接修改原变量;引用传递使用别名直接操作原变量。值传递适合基本类型且无需修改的场景,指针传递是C语言的修改方式,引用传递是C++的高效选择。指针和引用都能修改原变量,但引用更安全且语法简洁。数组名传递本质是指针传递。开发者应根据需求选择合适方式,平衡性能与安全性。
2025-07-01 19:32:59
907
原创 『深度编码』MySQL:数据库命令(一)
摘要:本文介绍了数据库基础概念和SQL操作语言。主要内容包括:1)数据库基本术语(DBMS、表、字段、主键等);2)数据定义语言(DDL)操作:创建/删除数据库和表,修改表结构;3)数据查询语言(DQL)操作:基本查询、条件筛选(BETWEEN、LIKE、IN等);4)数据操作语言(DML)操作:插入、更新和删除数据。文章提供了常用SQL语句的语法格式和实用示例,涵盖数据库管理的基本操作,适合数据库初学者快速掌握SQL基础。
2025-06-30 00:58:15
522
原创 算法-每日一题(DAY11)每日温度
摘要: 题目要求计算每日温度后首次出现更高温度的间隔天数。采用单调栈解法:遍历温度数组,栈保存未找到更高温度的日期索引。当当前温度高于栈顶日期温度时,计算间隔天数并更新结果数组,重复操作直至栈空或温度不高于栈顶。每个日期仅入栈和出栈一次,时间复杂度O(n),空间复杂度O(n)。示例输入[73,74,75,71,69,72,76,73],输出[1,1,4,2,1,1,0,0]。
2025-06-20 20:45:10
2294
原创 算法-每日一题(DAY10)打家劫舍
摘要:力扣198题"打家劫舍"要求计算在不触动警报(不能连续偷窃相邻房屋)的情况下能获得的最大金额。采用动态规划解法,核心状态方程为dp[i] = max(dp[i-1], dp[i-2]+nums[i])。通过优化空间,仅用3个变量记录状态:pas(前两间最优解)、pre(前一间最优解)和临时变量tem。算法初始化后遍历数组,每次比较偷或不偷当前房屋的收益,更新状态变量,最终返回pre。时间复杂度O(n),空间复杂度O(1)。示例输入[2,7,9,3,1]的输出结果为12。
2025-06-20 12:00:09
1246
原创 算法-每日一题(DAY9)杨辉三角
摘要:本文介绍了生成杨辉三角的算法,重点分析了动态规划解法。题目要求根据给定行数numRows输出杨辉三角前n行,每个数值是其左上方和右上方数值之和。核心解法使用二维数组,初始化边界为1,内部元素通过递推公式res[i][j]=res[i-1][j-1]+res[i-1][j]计算,时间复杂度O(n²)。文章还比较了递归和数学解法(组合数计算),但动态规划在效率上更优。该算法体现了组合数的基本性质C(n,k)=C(n-1,k-1)+C(n-1,k)。
2025-06-18 10:20:34
605
原创 算法-每日一题(DAY8)爬楼梯
LeetCode 70题爬楼梯问题要求计算爬n阶楼梯的方法数,每次可爬1或2阶。该问题本质上是斐波那契数列的变种,递推公式为f(n)=f(n-1)+f(n-2)。采用动态规划解法,用三个变量存储中间状态,通过循环计算每个台阶的方案数。时间复杂度O(n),空间复杂度O(1)。示例显示方案数随台阶数呈斐波那契增长,如n=5时有8种方法。
2025-06-17 18:30:00
879
原创 算法-每日一题(DAY7)接雨水
题目描述给定n个非负整数表示柱子的高度,计算能接多少雨水。采用动态规划解法,通过预处理每个位置的左右最大高度数组来计算水量。具体步骤包括:1) 预处理左右最大高度数组L和R;2) 遍历每个位置,取左右最大高度的较小值减去当前高度得到积水量;3) 累加所有位置的水量。示例演算显示输入[0,1,0,2,1,0,1,3,2,1,2,1]时正确输出6。算法时间复杂度O(n),空间复杂度O(n),高效解决了该问题。
2025-06-16 20:35:29
960
原创 『深度编码』C++中类和结构体的区别
C++中类和结构体在功能上高度相似,都能封装数据和操作,支持继承、访问控制等特性。主要区别在于默认设置:类默认成员为private访问权限和private继承,更适合封装实现细节;结构体默认public访问权限和public继承,更适合简单数据聚合。这些默认行为差异使得类更适用于复杂对象建模,而结构体更适合数据容器场景,但通过显式声明二者可实现相同功能。
2025-06-12 21:28:24
446
原创 算法-每日一题(DAY6)三数之和
本文探讨了LeetCode上的三数之和问题,要求从整数数组中找出所有和为0且不重复的三元组。解题采用排序+双指针法:首先对数组排序,然后外层循环固定第一个元素,内层使用双指针寻找匹配的后两个元素。当三数之和小于0时移动左指针,大于0时移动右指针,等于0时记录结果并跳过重复元素。算法时间复杂度为O(n^2),空间复杂度O(logn)。相比哈希表法,双指针法在效率和去重方面更具优势。文章还拓展了四数之和的解法思路,通过增加循环层数实现。该方法兼顾了代码简洁性和执行效率,是解决此类问题的优选方案。
2025-06-12 20:00:42
873
原创 算法-每日一题(DAY5)盛最多水的容器
本文介绍了LeetCode上"盛最多水的容器"问题的双指针解法。题目要求在给定的高度数组中找出两条垂线,使其与x轴构成的容器能盛最多的水。解题思路是使用双指针分别指向数组首尾,计算当前面积并移动较小高度的指针向中间靠拢,逐步缩小范围直至两指针相遇。关键公式为面积=(R-L)*min(height[L],height[R])。该算法时间复杂度为O(n),空间复杂度为O(1),示例演示了算法运行过程,最终输出最大盛水面积49。
2025-06-11 19:30:10
926
原创 算法-每日一题(DAY4)买卖股票的最佳时机
本文介绍了力扣(LeetCode)题目“121. 买卖股票的最佳时机”。题目要求在给定的股票价格数组中,选择某一天买入股票,并在未来某一天卖出,计算最大利润。如果无法获得任何利润,则返回0。解题思路是通过遍历价格数组,更新最小价格并计算利润,同时记录最大利润。算法通过两次遍历,分别更新最小价格和最大利润,时间复杂度为O(n),空间复杂度为O(1)。最终,代码实现通过比较当前价格和最小价格的差值来动态计算最大利润。
2025-06-10 23:53:27
378
原创 『深度编码』C++中类的访问权限
C++访问权限机制为面向对象编程提供了关键的数据保护手段。文章详细介绍了三种访问权限:public(公开)、protected(保护)和private(私有)。public成员可在任何作用域访问;protected成员仅限类内及派生类访问;private成员仅限类内访问。通过示例代码展示了不同权限的具体应用场景和访问规则,并对比了三者在继承体系中的行为差异。文章还指出class默认权限为private,而struct默认权限为public。合理运用访问权限控制是实现封装性、确保代码安全性和可维护性的重要手段
2025-06-10 20:00:12
2540
原创 算法-每日一题(DAY3)玩筹码
本文介绍了解决力扣(LeetCode)题目“玩筹码”的思路和代码实现。题目要求将 n 个筹码从不同位置移动到同一位置,且根据移动距离的不同产生不同的费用。移动偶数距离不收费,而移动奇数距离需要付出代价为 1。核心思想是判断奇数位置和偶数位置的筹码数量,选择将数量少的那一类筹码全部移动到另一类位置,以最小化总费用。文章通过遍历数组计算奇偶位置的筹码数量,并返回较少数量的筹码作为最小代价。文章提供了一个解决方案的代码,分析了时间和空间复杂度,并通过几个示例演算解释了代码的实现与思路。
2025-06-09 20:30:05
416
原创 算法-每日一题(DAY2)移除元素
力扣 27 题 “移除元素” 要求原地移除数组中所有等于给定值val的元素,并返回剩余元素的数量k,其中数组前k个元素需为非val元素(顺序不限)。解题采用双指针法:左指针L记录有效元素位置,右指针R遍历数组。遍历中若nums[R]不等于val,则将其复制到nums[L]并同时后移L和R;若等于val,则仅后移R。最终L的值即为k。优化后的代码将R++操作移至判断外,逻辑更简洁。该方法时间复杂度为 O (n)(R遍历数组一次),空间复杂度为 O (1)(仅用两个指针变量)。
2025-06-08 16:00:00
736
原创 『深度编码』C++中new和malloc的区别
C++中new与malloc的关键差异对比摘要 new和malloc虽同为内存分配工具,却存在本质区别:new作为C++运算符,具有类型安全(无需强制转换)、自动计算内存大小、支持重载、抛出异常等特性,且会调用构造/析构函数;malloc作为C函数则需要显式类型转换、手动计算字节数、不可重载、返回NULL表示失败,且不涉及对象生命周期管理。new更适合面向对象的C++开发,而malloc更适用于底层C编程。选择时需考虑类型安全、异常处理、对象构造等需求,new通常能提供更高效安全的现代C++开发体验。
2025-06-07 19:03:58
2056
原创 『深度编码』C++中的引用
C++引用机制是一种为变量创建别名的技术,它避免了数据复制,提高了效率。引用必须初始化且不可为空,分为左值引用(绑定已命名变量)、右值引用(绑定临时值)和万能引用(模板中可绑定任意值)。作为函数参数时,引用能直接修改实参;作为返回值时,可返回可修改的左值。引用本质是指针常量,比指针更安全:必须初始化、禁止空值、不可重绑定且语法简洁。与指针相比,引用没有多级间接访问,sizeof返回被引用对象大小,访问时自动解引用。这些特性使引用成为C++中高效且安全的别名机制,特别适用于参数传递和返回值优化场景。
2025-05-31 19:39:51
601
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅