随笔分类 -  数据结构与算法

摘要:C++ 中数据读取 C++ 输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取。cin、cin.get()、 cin.getline()、geline() 四个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的。下面会介绍它们之间的区别。 cin 结束条件:[enter 阅读全文
posted @ 2022-08-16 13:06 Logan_Xu 阅读(154) 评论(0) 推荐(0) 编辑
摘要:题目描述 王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: | 主件 | 附件 | | | | | 电脑 | 打印机,扫描仪 | | 书柜 | 图书 | | 书桌 | 台灯,文具 | | 工作椅 | 无 | 如果要买归类为附件的物品 阅读全文
posted @ 2022-08-09 15:06 Logan_Xu 阅读(338) 评论(0) 推荐(0) 编辑
摘要:题目路径 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→ 阅读全文
posted @ 2022-08-08 16:23 Logan_Xu 阅读(34) 评论(0) 推荐(0) 编辑
摘要:在算法中,动态规划题目算是比较经典的一类题目。在找工作中,不管是笔试,还是面试,我们经常会遇到用动态规划来解决问题的情况,有时候面试官还需要我们现场手写出动态规划解法的代码。因此,在求职中能灵活的运用动态规划就相当重要了。下面我总结出了一些经典的动态规划题目,其中有些还是面试中遇到的。 什么是动态规 阅读全文
posted @ 2022-08-08 15:43 Logan_Xu 阅读(29) 评论(0) 推荐(0) 编辑
摘要:题目链接 三角形最小路径和 题目描述 给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动 阅读全文
posted @ 2022-08-08 15:15 Logan_Xu 阅读(83) 评论(0) 推荐(0) 编辑
摘要:题目链接 跳台阶 题目描述 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 数据范围:1n40 要求:时间复杂度:O(n) ,空间复杂度: O(1) 问题分析 设 f(n)阅读全文
posted @ 2022-08-08 15:05 Logan_Xu 阅读(95) 评论(0) 推荐(0) 编辑
摘要:题目: 有一个国家发现了 N 座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是 W 人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 每座金矿的产量和需要的矿工人数都不相同: 一个输 阅读全文
posted @ 2022-08-08 13:37 Logan_Xu 阅读(192) 评论(0) 推荐(0) 编辑
摘要:题目链接 斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。 斐波那契数列是一个满足 $fib(x)= \begin{cases} 1 & \text{ if } x= 1,2\ fib(x-1)+fib(x-2) & \text{ if 阅读全文
posted @ 2022-08-08 09:50 Logan_Xu 阅读(236) 评论(0) 推荐(0) 编辑
摘要:字典树 (Trie),又称单词查找树、前缀树,是一种树形结构,是一种哈希树的变种。在统计、排序和保存大量的字符串(但不仅限于字符串)是具有更小的时间复杂度,因此可以应用于搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 阅读全文
posted @ 2022-05-12 16:00 Logan_Xu 阅读(1593) 评论(2) 推荐(1) 编辑
摘要:堆 堆的一个经典的实现是完全二叉树(complete binary tree),这样实现的堆称为二叉堆(binary heap)。 这里来说明一下满二叉树的概念与完全二叉树的概念。 满二叉树:除了叶子节点,所有的节点的左右孩子都不为空,就是一棵满二叉树,如下图。 可以看出:满二叉树所有的节点都拥有左 阅读全文
posted @ 2022-03-01 16:02 Logan_Xu 阅读(51) 评论(0) 推荐(0) 编辑
摘要:基数排序 基数排序是一种非比较型整数排序算法,其原理是将数据按位数切割成不同的数字,然后按每个位数分别比较。 假设说,我们要对 100 万个手机号码进行排序,应该选择什么排序算法呢?排的快的有归并、快排时间复杂度是 O(nlogn),计数排序和桶排序虽然更快一些,但是手机号码位数是11 阅读全文
posted @ 2022-03-01 15:51 Logan_Xu 阅读(57) 评论(0) 推荐(0) 编辑
摘要:桶排序 桶排序可以看成是计数排序的升级版,它将要排的数据分到多个有序的桶里,每个桶里的数据再单独排序,再把每个桶的数据依次取出,即可完成排序。 我们拿一组计数排序啃不掉的数据 [ 500,6123,1700,10,9999 ] 来举例。 第一步,我们创建 10 个桶,分别来装 0-1000 、100 阅读全文
posted @ 2022-03-01 15:40 Logan_Xu 阅读(206) 评论(0) 推荐(0) 编辑
摘要:计数排序 计数排序是一种非基于比较的排序算法,我们之前介绍的各种排序算法几乎都是基于元素之间的比较来进行排序的,计数排序的时间复杂度为 O(n+m),m 指的是数据量,说的简单点,计数排序算法的时间复杂度约等于 O(n),快于任何比较型的排序算法。 以下以[ 3,5,8,2,5, 阅读全文
posted @ 2022-03-01 15:21 Logan_Xu 阅读(148) 评论(0) 推荐(0) 编辑
摘要:堆排序 顾名思义,是利用堆这种数据结构来进行排序的算法。 如果你了解堆这种数据结构,你应该知道堆是一种优先队列,两种实现,最大堆和最小堆,由于我们这里排序按升序排,所以就直接以最大堆来说吧。 我们完全可以把堆(以下全都默认为最大堆)看成一棵完全二叉树,但是位于堆顶的元素总是整棵树的最大值,每个子节点 阅读全文
posted @ 2022-03-01 14:27 Logan_Xu 阅读(69) 评论(0) 推荐(0) 编辑
摘要:快速排序 快速排序的核心思想也是分治法,分而治之。它的实现方式是每次从序列中选出一个基准值,其他数依次和基准值做比较,比基准值大的放右边,比基准值小的放左边,然后再对左边和右边的两组数分别选出一个基准值,进行同样的比较移动,重复步骤,直到最后都变成单个元素,整个数组就成了有序的序列。 我们以[ 8, 阅读全文
posted @ 2022-03-01 14:06 Logan_Xu 阅读(95) 评论(0) 推荐(0) 编辑
摘要:归并排序 归并字面上的意思是合并,归并算法的核心思想是分治法,就是将一个数组一刀切两半,递归切,直到切成单个元素,然后重新组装合并,单个元素合并成小数组,两个小数组合并成大数组,直到最终合并完成,排序完毕。 我们以[ 8,2,5,9,7 ]这组数字来举例 首先,一刀切两半: 再切: 再切: 粒度切到 阅读全文
posted @ 2022-03-01 11:24 Logan_Xu 阅读(55) 评论(0) 推荐(0) 编辑
摘要:基础 有向图的表示 假设有向图有 n 个节点,按 0 到 n - 1 编号,其中 n 是 graph 的节点数。图以下述形式给出:graph[i] 是编号 j 节点的一个列表,满足 (i, j) 是图的一条有向边。 输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]] 阅读全文
posted @ 2022-01-04 09:10 Logan_Xu 阅读(160) 评论(0) 推荐(0) 编辑
摘要:希尔排序 希尔排序,它是由 D.L.Shell 于1959 年提出而得名。根据它的名字很难想象算法的核心思想。它的核心思想是把一个序列分组,对分组后的内容进行插入排序,这里的分组只是逻辑上的分组,不会重新开辟存储空间。它其实是插入排序的优化版,插入排序对基本有序的序列性能好,希尔排序利用这一特性把原 阅读全文
posted @ 2021-12-28 13:59 Logan_Xu 阅读(49) 评论(0) 推荐(0) 编辑
摘要:树 c++ 版 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), le 阅读全文
posted @ 2021-12-24 17:03 Logan_Xu 阅读(27) 评论(0) 推荐(0) 编辑
摘要:[更新中.....] 数据结构与算法 线性表 数组 栈 队列 链表 散列表 散列函数 冲突解决 位图 动态扩容 树 二叉树 二叉查找树 字典树 平衡二叉树 平衡二叉查找树 多路查找树 堆 图 图的存储 关键路径 最小生成树 最短路径 拓扑排序 基本算法思想 动态规划 贪心算法 回溯算法 分治算法 枚 阅读全文
posted @ 2021-12-24 15:59 Logan_Xu 阅读(39) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示