
🔥近津薪荼:个人主页
🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》《Linux操作系统及网络基础知识分享》《近津薪荼的算法日迹》
❄️父母是隔在我们和死亡之间的帘子。
你和死亡好像隔着什么在看,没有什么感受,
你的父母挡在你们中间,
等到你的父母过世了,你才会直面这些东西。
------《百年孤独》
1.上期参考代码
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==nullptr||head->next==nullptr)//注意顺序
{
return head;
}
ListNode* tmp=swapPairs(head->next->next);
ListNode* newhead=head->next;
head->next->next=head;
head->next=tmp;
return newhead;
}
};
2.本期知识点导图

3.本期要讲解的题目是
Pow(x, n)

要点:
- 快速算出x的n次方
- 注意防止数据溢出
4.解题:
4.1暴力解法
累乘,循环递归都行,时间复杂度:O(N)。
分析过程
我们观察累乘的过程,就拿3的8次幂来举例,暴力解法是累乘8次,需要进行9次运算,不够,我们可以把它拆解成两个3 的四次幂相乘,四次幂再拆成2次幂,2次幂再拆成1次幂,1次幂拆成3与零次幂相乘(考虑n可以等于0)这样我们只需要算4次((lg8/lg2)+1)时间复杂度就变成了O(logN)。
4.2优解:
有上述分析,我们已经有了点思路,我们拿两个例子画个图

我们发现
1.处理过程中会出现两情况:奇数/偶数 次幂,那我们在写递归的时候就需要注意分两种情况讨论
(当然要是想3次幂的话就要讨论3种情况,以此类推,但是2次是最合理的)