随笔分类 -  面试常见编程题

摘要:给定一个正整数n,计算n与斐波那契数的最小差值(绝对值) 说明: 斐波那契数定义: 从0,1开始后面的数值为前面两者之和, 即第三个数为第一和第二个数之和 形如:0,1,1,2,3,5,8,13,21。。。。 其中3为1与2的和,5为2与3的和,8为3与5的和等等 要计算的数值案例: 输入15,与斐 阅读全文
posted @ 2020-04-26 10:38 PennyXia 阅读(279) 评论(0) 推荐(0) 编辑
摘要:题目描述: 思路一:递归 此类求多少种可能性的题目一般都有递推性质 ,即 f(n) 和 f(n−1)…f(1) 之间是有联系的 f(0)=1 f(1)=1 f(2)=2 f(3)=3 f(4)=5 .... 以上类似斐波那契数列,不同的是斐波那契数列f(0)=0 1 class Solution { 阅读全文
posted @ 2020-04-25 23:15 PennyXia 阅读(559) 评论(0) 推荐(0) 编辑
摘要:思路:递归 当前结点没有儿子结点时,最大值就是该结点的值 如果有左右子树,将当前结点node和左右子树的最大值进行比较,选出较大的一个 如果只有左(右)子树,则node的值与左(右)子树的最大值进行比较 1 #include <iostream> 2 #include <algorithm> 3 u 阅读全文
posted @ 2020-04-25 21:37 PennyXia 阅读(1243) 评论(0) 推荐(0) 编辑
摘要:题目描述:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/ 思路一:DFS 定义数组maxNum[],其中下标为层数level,元素值为每层的最大值 如果当前结点是遇到的某层的第一个结点则将该结点的键值存入数组 阅读全文
posted @ 2020-04-25 15:51 PennyXia 阅读(272) 评论(1) 推荐(0) 编辑
摘要:题目描述:https://leetcode-cn.com/problems/validate-binary-search-tree/ 思路一:递归 根据每一个结点键值的边界进行判断,如果不超出边界则合法,然后分别递归判断左右子树的结点 宏LONG_MAX和LLONG_MAX均存在与头文件limits 阅读全文
posted @ 2020-04-24 19:18 PennyXia 阅读(305) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://leetcode-cn.com/problems/invert-binary-tree/ 思路一:递归 将左右结点进行交换,递归的对左右节点的左右子树进行交换 判断根结点是否为空或只有一个结点 交换根结点的左右儿子 对该结点的左右子树进行交换 1 /** 2 * Defin 阅读全文
posted @ 2020-04-22 19:10 PennyXia 阅读(160) 评论(0) 推荐(0) 编辑
摘要:思路: 使用两个数组,a[]存储所有arr中重复的元素,另一个数组b[]下标是arr中的元素值,数组元素是对应下标值出现的次数。时间复杂度是O(n) 需要注意的是,b[]需要申请静态数组,因为如果使用动态数组相邻两个元素值差别的话会发生溢出;a[]需要时动态数组,因为元素个数不确定同时所有元素都是有 阅读全文
posted @ 2020-04-07 17:59 PennyXia 阅读(592) 评论(0) 推荐(0) 编辑
摘要:思路: 就是最大子列和呗,时间复杂度最佳那就是O(n),使用贪心算法。 以下是三种方法,时间复杂度递减 1 // preface.cpp : 基本概念 求最大子列和 2 #include "pch.h" 3 #include <iostream> 4 using namespace std; 5 6 阅读全文
posted @ 2020-04-07 17:22 PennyXia 阅读(529) 评论(0) 推荐(0) 编辑
摘要:思路: 不用开辟第三方数组的做法 可以模拟,我还没想好怎么描述。。。。 1 //num1[]空间足够 2 void Merge(int *num1, int m, int*num2, int n) { 3 int i = m-1, j = n-1; 4 while (i>=0&&j>=0) { 5 阅读全文
posted @ 2020-04-07 17:03 PennyXia 阅读(203) 评论(0) 推荐(0) 编辑
摘要:啥是循环链表: 循环链表是一种链式的存储结构,与单链表不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者头结点,从而构成一个环形的链。 循环链表的运算与单链表的运算基本一致,所不同的有以下几点: 在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像单链表那样置为 阅读全文
posted @ 2020-04-07 16:40 PennyXia 阅读(1851) 评论(0) 推荐(0) 编辑
摘要:思路(证明有环): 定义快慢指针fast和slow,fast每次前进两步,slow每次前进一步; 当fast和slow在到达链尾之前相遇的话,就证明有环(类似于在操场上跑步跑的慢的被快的套圈但总会遇到); 思路(找环结点): fast和slow相遇之后,fast不动,slow回到最初的起点,然后一步 阅读全文
posted @ 2020-04-07 14:06 PennyXia 阅读(903) 评论(0) 推荐(0) 编辑
摘要:分析: 其实就是p先跑然后标示出p和pre的恒定差,此后一直维持这种恒定差就能在p到最后的时候,pre能指向倒数第N个结点。 思路: 定义两个指针p、pre都指向头结点; p指针先跑,当p指针跑了N-1个节点后,pre指针再开始跑; 当p指针跑到最后时,pre所指指针就是倒数第N个节点。 1 #in 阅读全文
posted @ 2020-04-07 13:39 PennyXia 阅读(573) 评论(0) 推荐(0) 编辑
摘要:分析: 两条单向链表相交的唯一可能是(b),以为链表结点只有一个指针域不可能指向两个不同的结点。 手画图还是丑的,我需要学画图软件了(╯﹏╰)b 思路: 遍历两个链表分别存入栈s1和s2; 只要两个栈不空就一起出栈,遇到第一个不同的元素就是相交的结点。 1 #include <iostream> 2 阅读全文
posted @ 2020-04-07 13:20 PennyXia 阅读(534) 评论(0) 推荐(0) 编辑