日志
【2021-3-2】
9. 回文数
- 判断对错
- 考虑临界情况。
- 考虑奇偶情况。
13. 罗马数字转整数
- 按规则转换输入
- 关联容器map
- 从特殊情况入手,分类讨论。
剑指 Offer 03. 数组中重复的数字
- 关联容器
- 有空间复杂度为O(1)的做法
【2021-3-3】
剑指 Offer 04. 二维数组中的查找
- 缩小搜索范围
- size()函数返回的size_type是无符号整数
- 临界情况:m,n=0
【2021-3-9】
剑指 Offer 06. 从尾到头打印链表
我的做法是遍历链表一次,将数据从头到尾存入数组;然后将数组翻转。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> data;
while(head != NULL){
data.push_back(head -> val);
head = head -> next;
}
int tmp;
for(auto x =0; x != data.size() / 2; ++x){
tmp = data[x];
data[x] = data[data.size() - 1 - x];
data[data.size() - 1 - x] = tmp;
}
return data;
}
};
- 遍历链表的基本写法。循环到当前指针为NULL.
- 翻转数组的基本写法。无论奇偶,循环到数组长度length/2的位置,交换前后的数据。
其他解法:
容易想到基于栈来实现,而递归在本质上就是一个栈结构,所以有可以用递归来实现。用栈更稳定。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
if(head == NULL){
return {};
}
vector<int> data = reversePrint(head->next);
data.push_back(head->val);
return data;
}
};
总结
时间/空间复杂度
- 看程序中的循环
- 循环实际执行次数与n的关系