算法 + 数据结构
我有两颗糖
你不妨大胆一些,爱一个人,攀一座山,追一个梦。
展开
-
C++ sort排序
C++ sort 函数原创 2022-06-11 15:59:12 · 129 阅读 · 0 评论 -
二叉树中是否存在节点和为指定值的路径
题目描述给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径例如:给出如下的二叉树,sum=22sum = 22sum=22返回 true,因为存在一条路径 5→4→11→2 的节点值之和为 22分析方法1:使用递归来实现方法2:用 DFS 实现(使用栈)代码实现/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNo原创 2020-10-29 18:55:57 · 468 阅读 · 0 评论 -
链表倒数第k个结点(双指针实现)
题目描述输入一个链表,输出该链表中倒数第k个结点。示例1输入: 1,{1,2,3,4,5}返回值: {5}分析考虑使用 双指针:使用 p q 两个指针q从头部先走k个距离,p指向头部接下来p和q同步向前移动,知道q走到链表尾部,返回pcode/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solu原创 2020-10-29 17:25:23 · 251 阅读 · 0 评论 -
二叉树的层次遍历(分层输出)
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7}该二叉树层序遍历的结果是[[3], [9,20], [15,7] ]分析二叉树的层次遍历可以用 BFS 来实现,使用一个队列 queue 来实现要区分每一层节点的个数,可以考虑每次访问时,访问同一层的所有元素,将下一层的所有元素放入队列(使用 size 函数来计算一层节点数)程序设计/** * struct TreeNode { * i原创 2020-10-27 15:59:40 · 8328 阅读 · 0 评论 -
计算由不相邻元素组成的子序列和的最大值
问题描述给出一个序列 arr ,在 arr 中选择若干个互补相邻的元素组成子序列,计算子序列和的最大值方法1 —— 递归实现考虑使用 递归,定义rect_func(i)为子序列所有元素均在元素arr[i]之前时,子序列的最大值递归终止条件为i == 0 或 i == 1rect_func(i) = max(rect_func(i-2) + arr[i], rect_func(i-1)),其中rect_func(i-2) + arr[i]代表选择了元素arr[i], rect_func(i-1)代原创 2020-10-26 22:38:10 · 431 阅读 · 0 评论 -
两个链表生成相加链表
题目描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入[9,3,7],[6,3]输出{1,0,0,0}算法设计与分析实现链表的反转(数字相加从个位开始,但链表对逆序操作插入不方便)按链表顺序计算数值(考虑进位、一个链表有数字剩余)将链原创 2020-10-25 22:37:14 · 287 阅读 · 0 评论 -
LRU的设计 —— 基于set容器来实现
题目描述设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若opt=1,接下来两个整数x, y,表示set(x, y)若opt=2,接下来一个整数x,原创 2020-10-25 22:26:20 · 296 阅读 · 0 评论 -
递归算法
一、汉诺塔问题问题描述 给定三根柱子,柱子A上放了n个圆盘(下面大,上面小),要求将n个圆盘搬移到C,始终保持小圆盘在大圆盘上面。分析若只有1个圆盘,则直接从A搬移到C若有2个圆盘,则将第一个圆盘从A搬移到B,再把第二个圆盘从A移到C,最后将B柱子上的圆盘移到C若有n个圆盘(n > 1),则先以柱子C为中介,将上面 n-1 个圆盘搬移到B,将A上的1个圆盘移到C,再将B上的n-1个圆盘移到C代码实现#include <bits/stdc++.h> using nam原创 2020-10-25 14:26:08 · 227 阅读 · 0 评论