
剑指offer
洋芋洋芋洋芋
这个作者很懒,什么都没留下…
展开
-
剑指offer 递归与递推
递归与递推如果递归的调用层数太多, 程序可能会爆栈 (栈溢出), 所以我们需要尽可能不要写递归层数过多的递归. 甚至尽量将递归写成递推如斐波那契数列, 其实可以用数组嘛, 把中途的计算的结果记忆化一下, 对于求很大斐波那契数列的项数时, 可以用矩阵快速幂加速一下, 这里不展开讨论, 如果对此感兴趣的同学, 可以去数论分栏看看...原创 2021-05-11 12:29:16 · 71 阅读 · 0 评论 -
剑指offer 数据结构之栈与队列
栈和队列栈 和 队列非常常见栈的主要特征是 先进后出队列的主要特征是 先进先出用两个栈实现队列思路:stack1: 1 2 3 4 (假设右边是栈顶)stack2:每一次遇到删除操作, 就把stack1 按照出栈的顺序加到stack2, 然后对stack2 进行出栈stack1:stack2: 4 3 2如果遇到添加操作, 继续向stack1 进行入栈操作用两个队列实现栈思路:queue1: 1 2 3 4 (假设左边是队列出口)queue2:遇到一个删除操作, 就对que原创 2021-05-11 12:24:19 · 89 阅读 · 0 评论 -
剑指offer 数据结构之树
树大部分涉及的树都是二叉树一般树的遍历方式如下:前序遍历: 先访问根节点, 再访问左子节点, 最后访问右子节点中序遍历: 先访问左子节点, 再访问根节点, 最后访问右子节点后序遍历: 先访左子节点, 再访问右子节点, 最后访问根节点重建二叉树给你一个二叉树的前序遍历和中序遍历, 请重建二叉树根据 前序遍历 和 中序遍历 的结果, 可以求得树的根节点以及两个子树的大小那么剩下的就是递归#include <bits/stdc++.h>using namespace std原创 2021-05-11 12:02:09 · 74 阅读 · 0 评论 -
剑指offer 数据结构之链表
链表struct listNode { int value; listNode* next;};// addvoid addToTail(listNode** head, int value) { listNode* newNode = new listNode(); newNode -> value = value; newNode -> next = nullptr; if(*head == nullptr) { // 判断是否为空 *head = newNode原创 2021-05-11 10:28:07 · 78 阅读 · 0 评论 -
剑指offer 数据结构之字符串
字符串c/c++ 中, 当几个指针赋值给相同的常量字符串时,实际会有相同的内存地址char str1[] = "hello world";char str2[] = "hello world";char* str3 = "hello world";char* str4 = "hello world";if(str1 == str2) { // false cout << true << endl;} else { cout << false原创 2021-05-11 10:27:28 · 124 阅读 · 0 评论 -
剑指offer 数据结构之数组
在写一些方法的时候一定要考虑空指针, 边界条件, 特殊输入, 错误处理数组数组中重复的数字解法一: 排序 时间复杂度很高 不推荐解法二:哈希表 空间复杂度稍微高了解法三:遍历整个数组,当遍历到下标为i 的数字 m 时, 判断 m 是否和 i 相等相等:继续遍历不等:和下标为 m 的数字进行比较相等:找到了一个重复数字m不等:把下标为 m 和 i 的数字互换, 再重复这个过程, 知道发现一个重复的数字bool isDupicate(int a[], int len原创 2021-05-11 10:25:33 · 91 阅读 · 0 评论