随笔分类 - 数据结构和算法
没啥说的,基本功,得长期训练,保持感觉。
摘要:题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 编程思想 知道斐波拉契数列的规律即可。 编程实现 class Solution { public: int Fibonacci(int n) { int preNum = 1;
阅读全文
摘要:题目描述 使用队列实现栈的下列操作:push(x) -- 元素 x 入栈;pop() -- 移除栈顶元素;top() -- 获取栈顶元素;empty() -- 返回栈是否为空; 编程思想 利用双队列实现,创建两个队列 q1,q2。 入栈:将元素 x 直接放入 q1 队列中。 出栈:也就是把 q1 的
阅读全文
摘要:题目描述 使用队列实现栈的下列操作:push(x) -- 元素 x 入栈;pop() -- 移除栈顶元素;top() -- 获取栈顶元素;empty() -- 返回栈是否为空; 编程思想 利用双队列实现,创建两个队列 q1,q2。 入栈:将元素 x 直接放入 q1 队列中。 出栈:也就是把 q1 的
阅读全文
摘要:题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 你只能使用
阅读全文
摘要:题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 编程思想 根据中序遍历的特点:左根右。可分为三种情况:1. 一个节点有右子树,那么它的下一个节点就是它的右子树的最左子节点。2. 一个节点没有右子树且它还
阅读全文
摘要:题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 编程思想 若前序或者中序序列为空或者长度不等则返回空
阅读全文
摘要:前序遍历 递归版 编程思想 即借助系统栈,效率较低。二叉树的前序遍历规则:1. 访问根结点; 2. 遍历左子树; 3. 遍历右子树 编程实现 //树的定义 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int
阅读全文
摘要:题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 编程思想 从前往后遍历,将值存入栈中,然后打印栈中内容即可。 编程实现 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x
阅读全文
摘要:题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。 编程思想 首先求出字符串空格的个数,然后新字符串的长度 = 旧字符串的长度 + 2 * 空格的个数,最后从后往前遍历复制即可。
阅读全文
摘要:题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 编程思想 首先选取数组中右上角(或者左下角)的数字,如果该数字等于要查找的数字则返回true,如
阅读全文
摘要:题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2或者3。 编程思想 遍历数
阅读全文
摘要:转自:https://blog.csdn.net/liang19890820/article/details/61615495 Singleton 的头文件(懒汉式/饿汉式公用): // singleton.h #ifndef SINGLETON_H #define SINGLETON_H #inc
阅读全文
摘要:Q:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。 class CMyString { public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void); pri
阅读全文
摘要:Q:把一个字符串转换为整数。 A1:一个普通但漏洞百出的解法。 int StrToInt(char* str) { int number = 0; while (*str != 0) { number = number * 10 + *str - '0'; ++str; } return numbe
阅读全文
摘要:编程语言: Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别? A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const。首先来看如下的一段代码: int a = 100; const int *b = &a; // 1
阅读全文
摘要:给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 给定一个二叉树,判断是否为完全二叉树。
阅读全文
摘要:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 示例 2: 提示: 给定链表的结点数介于 1 和 100 之间。
阅读全文
摘要:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1: 示例 2: 说明: 链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节
阅读全文
摘要:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 示例 2:
阅读全文
摘要:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
阅读全文

浙公网安备 33010602011771号