20210712一周总结

这篇博客总结了《剑指Offer》刷题第一周的重点,涉及快排、二分查找、字符串处理、树的遍历、栈与队列的应用、斐波那契数列、位运算、动态规划等多个核心知识点。通过实例解析了各种常见算法的实现和优化,包括递归与栈的相互转换、二分查找的变体、字符串扩容的注意事项以及链表、树结构的操作。此外,还探讨了如何解决特定问题,如矩阵查找、随机节点映射和环形链表等。

剑指offer刷题总结 第一周

重点总结

快排 头插法 树的遍历7种 二分法

分题总结

JZ1 沿对角线递增的二维数组的查找 常规解法 逐行进行二分查找 时间复杂度O(MlogN) 有序数列的查找首先考虑二分法
JZ2 string的扩容类似vector 会使迭代器的地址发生改变 处理字符串时多采用数组下标访问进行操作
string的一些函数

string(const string & str,size_t pose,size_t count)
string(size_t count,char ch)
string::append(size_t count,char ch)
string::appendconst string& str) 
string::append(const string & str,size_t pos,size_t count = npos)
string::append(T::const_iterator first,t::const_iterator last)
string::substr( size_t pose,size_t count = npos)

形参顺序:str对象->pos->count->char内容
JZ3 递归和栈在多数情况下可以互相转换
JZ4 根据前序和中序遍历可以还原一整颗树 树的三种遍历(递归+迭代)+层次遍历待掌握
JZ5 用栈实现队列 用到了缓冲的思想 为保证出栈s1后的元素能与之后入栈元素相对位置不变 当s2空时 将s1整个换到s2中 s2相当于一个缓冲区 其中元素永远不会回到s1中
JZ6 二分查找的思路 判断条件有所变化
JZ7~8是fibonacci问题 而JZ10是fibonacci的变形 f(1)=1; f(2)=2; f(3)=3; f(n)=f(n-1)+f(n-2) 这是经典的递归问题 但JZ9复杂跳台阶并不是 当f(n)等于n-1到1所有情况相加时 f(n) = 2f(n-1) 这种应用题有很多种解法 用公式推导也很有趣
JZ11 二进制位移操作>>会比除法/2效率 负数C++中表示为补码形式(原码取反+1) 负数的右移会在左端加1 所以此题可以按位与1相与&来判断该位是否为1 可以采用1<<的方法从右向左遍历 这样避免了负数右移无限循环的问题 同时还有通过n&(n-1)的消去最右面的一个1 循环统计1的个数 很巧妙
JZ12 可以把幂次二进制分解 每次exponent>>1 系数ret也跟着pow2 若exponent&1base*= retret表示幂数在二进制表示中第n位分解出的pow(base, n)
JZ13 对时间有限制 用辅助vector将原vector拆分出奇偶两部分 再拼接在一起 若需要空间复杂度O(1) 可采用类似冒泡的思路
JZ14 可以用双指针做 也可以用栈或递归去做 都不难
JZ15 标准头插法
JZ16 揪面团 把两个面团揪成另一个面团 所以过程中有三条链表
JZ17 要判断树的子结构 遍历+递归 而不是遍历x递归 依次遍历树的每个节点 若与小树root值相等 则递归比较子树
JZ19 可以用递归或者迭代 坐标移动的位置与圈数有直接联系 每次递归绕一个圈 处理好最后剩下的圆心位置即可
JZ25 双层循环找到每个节点对random节点的映射关系 存在pair<Node*,count>里 random可以通过计数记录map的相对位置 还原的时候再通过修正map中每个节点的random值使它们指向相对的node
JZ28 sort然后找中间数 或者设count同则++ 不同- - count==0替换 最后做一次判断
JZ29 可以用k次简单选择或者冒泡排序 复杂度O(k*n) 也可用快排判断返回位置与k的关系来求
JZ32 将数字转化为stringto_string(nums) 存入vector<string> vs设计比较函数static bool cmp(const string s1,const string s2) return s1+s2<s2+s1 通过sort(vs.begin(),vs.end(),cmp) 就将vs中的数字排序成了题目要求的顺序 再拼接在一起就好了
JZ35 归并的思路 动态规划的思想 局部最优解
JZ36 a+b = b+a 判定条件while(p1!=p2)很巧妙
JZ37 两次二分查找 通过判定条件的更改 找到左右边界
JZ42 1.暴力解法 将所有数存在hashmap里 遍历一次利用hash中find时间复杂度O(1)的特点 总的时间复杂度O(n) 2.双指针 一前一后找到的第一对就是乘积最小的一对
JZ50 找重复可以用set.insert() 返回一个pair<iterator,bool> 判断bool的值 找出插入失败的iterator 就是重复的元素
JZ51 动态规划 M[i] = M[i-1]*A[i-1] N[i] = N[i+1]*A[i+1] B[i] = M[i]*N[i]
JZ52 考虑a*所表示的三种情况 遍历即可
JZ53 条件比较复杂 但不难
JZ55 快慢指针判断是否有环 之后有两种方法 算出环长再用快慢指针 或者a = n(b+c) + c让两指针相遇
JZ56 遍历 设pre cur 两个指针
JZ57 暴力解法 中序递归存在vector中 直接找下一个 迭代解法 根据中序遍历判定条件直接求解
JZ65 遍历M*N 设置辅助vector存放是否访问过的bool 每个节点进行DFS 注意撞墙
JZ66 同上 判定条件有所改变
JZ67 动态规划 长度大于等于5才有剪的必要2*3>5 剪成3*(n-1)+rest 注意处理rest的不同情况(rest=则最后一刀不用剪4>1*3)

打开链接下载源码: https://pan.quark.cn/s/05da658a2377 在信息技术领域中,输入法作为操作系统的一个核心构成部分,赋予了用户利用键盘输入多语种文字的能力。"ime-日语输入法安装必须文件"这一资源是一套为日语输入法部署而设计、包含全部必要元素的集成包,对于那些需要在个人计算机上执行日语文字输入的操作者而言具有不可替代的作用。接下来将深入剖析其中所包含的核心概念。 IME(Input Method Editor,输入法编辑器)是操作系统内的一种软件支持服务,其功能在于为非拉丁字符环境提供文字输入方案,例如中文、日文、韩文等文字系统。在日本地区,IME通常被用来将罗马字(罗马拼音)形式的输入转换为平假名、片假名乃至汉字。此压缩文件内含的日语IME文件夹即为执行这一转换功能的关键要素。 kbdjpn.dll被视为一个关键的系统性文件,其意指“Japanese Keyboard Layout”(日语键盘布局)。该动态链接库文件负责设定日语键盘的排列方式及快捷操作组合,使用户能够借助常规的QWERTY键盘输入日语文字。倘若缺少这一文件,即便已经安装了日语输入法,依然无法正常显示及输入日语字符。 另外,imjp81k.dll同样是一个重要的系统性构成,它属于日语IME的范畴,全称为“Input Method Japanese for Windows 8.1 and later, Katakana mode”(适用于Windows 8.1及更新版本的日语输入法,片假名模式)。该文件支持日语的片假名输入,是处理日语输入的核心组成部分。在安装或升级日语输入法的过程中,保证imjp81k.dll的准确性与完整性显得尤为关键。 压缩包所含的"Window...
内容概要:本文研究了基于DPWMA调制与正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器在谐波抑制、电网不平衡适应性及动态响应方面的技术瓶颈。通过构建融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相控制与电网电压前馈的一体化控制体系,全面优化逆变器的输出波形质量、相位同步精度与抗扰能力。文章深入分析了ANPC三电平拓扑的结构优势,如开关损耗均衡、中点电位可控性强和电压利用率高等特点,并设计了包含信号采集、核心控制与调制驱动三层架构的完整控制系统。通过Simulink仿真平台对稳态运行、电网不平衡及动态扰动等多种工况进行验证,结果表明该策略显著降低了总谐波畸变率,提升了锁相精度与系统动态稳定性,有效增强了逆变器在复杂电网环境下的适应能力和运行可靠性。; 适合人群:具备电力电子、自动控制及新能源并网相关基础知识,从事新能源发电、微电网、电力系统仿真等领域的科研人员与工程技术人员,特别适合研究生及以上层次的研究者。; 使用场景及目标:①用于提升大功率并网逆变器在电网电压不平衡、谐波干扰和动态扰动等复杂工况下的运行性能;②为高电能质量要求的应用场景提供先进控制解决方案;③支持科研仿真、论文复现与实际工程项目中的高性能并网控制系统设计与优化。; 阅读建议:建议结合提供的Simulink仿真模型进行实践操作,重点理解DPWMA调制机制、正负序分离锁相算法与电网电压前馈控制之间的协同作用,按照文档结构系统学习,并与传统控制策略进行对比分析,以深入掌握改进策略的技术优势与实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值