![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 71
phial03
love coding!!! Go、Rust、Java,一名喜欢技术,热爱技术的程序猿!
展开
-
牛客网在线编程全部题目
牛客网在线编程题目原创 2022-03-26 21:02:36 · 2606 阅读 · 0 评论 -
动态规划-矩阵中的最短路径
一、牛客 NC59 矩阵的最小路径和给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。数据范围: 1≤n,m≤500,矩阵中任意值都满足 0 ≤ a(i,j) ≤100要求:时间复杂度 O(nm)O(nm)例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,所选择的最小累加和路径如下图所示:public int min原创 2022-05-05 23:03:40 · 3522 阅读 · 0 评论 -
BST树,AVL树, B树, B-树, B+树, B*树,红黑树RBT, 堆积树(堆), 字典树Trie,跳表
https://blog.csdn.net/Beyond_2016/article/details/81202511https://www.cnblogs.com/leng2052/p/5323954.htmlhttps://www.cnblogs.com/lca1826/p/6484469.html1. 二叉查找树 (Binary Search Tree)很显然,二叉查找树的发现完全是...原创 2018-11-27 17:57:27 · 166 阅读 · 0 评论 -
牛客剑指offer题目汇总
剑指offer总共66道题目汇总一.数组(共12道题目):1.二维数组中的查找6.旋转数组的最小数字13.调整数组顺序使奇数位于偶数前面19.顺时针打印矩阵28.数组中出现次数超过一半的数字30.连续子数组的最大和32.把数组排成最小的数35.数组中的逆序对37.数字在排序数组中出现的次数40.数组中只出现过一次的数字50.数组中的重复数字51.构建乘积数组二.字符串(共9道题目):2.替换空格27.字符串的排列34.第一个只出现一次的字符43.左旋转字符串44.反转原创 2022-05-04 19:07:23 · 1206 阅读 · 0 评论 -
牛客在线编程-华为机试-中等
题号题目知识点难度通过率HJ16购物单动态规划中等21.21%HJ17坐标移动字符串中等24.79%HJ20密码验证合格程序数组 字符串 模拟中等28.91%HJ24合唱队队列 动态规划中等26.04%HJ26字符串排序字符串 排序中等36.80%HJ27查找兄弟单词中等21.10%HJ29字符串加解密字符串 模拟中等27.18%HJ32...原创 2022-04-04 00:34:41 · 1317 阅读 · 0 评论 -
牛客在线编程-华为机试-简单
题号题目知识点难度通过率HJ1字符串最后一个单词的长度字符串简单32.49%HJ2计算某字符出现次数字符串 哈希简单30.43%HJ4字符串分隔字符串简单28.60%HJ5进制转换字符串简单33.28%HJ6质数因子排序简单27.01%HJ8合并表记录简单35.02%HJ10字符个数统计字符串 哈希简单47.31%HJ11数字颠倒字符串简单58.5...原创 2022-04-01 00:56:14 · 384 阅读 · 0 评论 -
12-排序(下):如何用快排思想在O(n)内查找第K大元素
上一节我讲了冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O(n2),比较高,适合小规模数据的排序。今天,我讲两种时间复杂度为 O(nlogn) 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂度内查...原创 2018-10-19 15:44:41 · 2322 阅读 · 2 评论 -
13-线性排序:如何根据年龄给100万用户数据排序?
上两节中,我带你着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。今天,我会讲三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。这几种排序算法理解起来都不难,...原创 2018-10-19 16:08:10 · 852 阅读 · 0 评论 -
14-排序优化:如何实现一个通用的、高性能排序函数?
几乎所有的编程语言都会提供排序函数,比如 C 语言中 qsort(),C++ STL 中的 sort()、stable_sort(),还有 Java 语言中的 Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排序算法呢?基于这些问题,今天我们就来看排序这部分的最后一块内容:如何实...原创 2018-10-25 13:55:11 · 192 阅读 · 0 评论 -
15-二分查找(上):如何用最省内存的方式实现快速查找功能?
今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。老规矩,我们还是来看一道思考题。假设我们有 1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中? 我...原创 2018-10-25 14:12:15 · 672 阅读 · 0 评论 -
16-二分查找(下):
通过 IP 地址来查找 IP 归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个 IP 地址,就会看到它的归属地。这个功能并不复杂,它是通过维护一个很大的 IP 地址库来实现的。地址库中包括 IP 地址范围和归属地的对应关系。当我们想要查询 202.102.133.13 这个 IP 地址的归属地时,我们就在地址库中搜索,发现这个 IP 地址落在 [202...原创 2018-10-28 19:24:04 · 398 阅读 · 0 评论 -
【数据结构与算法】一些常用的算法技巧总结
1. 巧用数组下标数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍历到,则arr[‘a’]就可以加1了,即 arr[‘a’]++;通过这种巧用下标的方法,我们不需要逐个字母去判断。再举个例子:问题:给你n个无序的int整型数组arr,并且...原创 2018-10-28 19:41:29 · 2141 阅读 · 0 评论 -
17 -跳表:为什么Redis一定要用跳表来实现有序集合?
上两节我们讲了二分查找算法。当时我讲到,因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗?实际上,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫作跳表(Skip list),也就是今天要讲的内容。跳表这种数据结构对你来说,可能会比较陌生,因为一般的数据结构和算法书籍里都不怎么会讲。但是它...原创 2018-10-30 17:36:49 · 3820 阅读 · 2 评论 -
18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示“拼写错误”。Word 的这个单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢?其实啊,一点儿都不难。只要你学完今天的内容,散列表(Hash Table)。你就能像微软 Office 的工程师一样,轻松实现这个功能。散...原创 2018-11-01 13:32:00 · 354 阅读 · 0 评论 -
蓝桥杯常考算法与方法集锦
#include <memory.h>或<string.h>void *memset(void *s, int ch, size_t n);#include <algorithm> sort(a,a+n)排序函数,从小到大,a为数组名字,n为元素个数 sort(vector.begin(),vector.end())排序vector 只要数据类...原创 2018-12-08 13:26:49 · 391 阅读 · 1 评论 -
常用经典排序算法详解分析与总结
常用经典排序算法详解分析与总结推荐: https://www.cnblogs.com/onepixel/articles/7674659.html https://blog.csdn.net/daguairen/article/details/526118740:、说明:0.1:虽然大家对排序算法可能熟悉,但是有好多人不明白描述算法的专业术语,下来我先解释一下术语描述:...原创 2018-03-30 21:29:41 · 279 阅读 · 0 评论 -
07-链表(下):如何轻松写出正确的链表代码
上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都掌握了,但是写链表代码还是很费劲。哈哈,的确是这样的!想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。从我上百场面试的经验来看,能把“链表反转”这几行代码写对的人不足 10%。为什么链表代码这么难写?究竟怎样才能比较轻松地写出正确的链表代码呢?只要愿意投入时...原创 2022-05-04 19:30:02 · 196 阅读 · 0 评论 -
10-递归:如何用三行代码找到“最终推荐人”?
推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以说,用户 C 的“最终推荐人”为用户 A,用户 B 的“最终推荐人”也为用户 A,而用户 A 没有“最终推荐人”。一般来说,我们会通过数据库来记录这种推荐关系。在数据库表中,我们可以记录两行数据,其中 actor_id 表示用户 id...原创 2018-10-12 12:52:34 · 304 阅读 · 0 评论 -
算法-答案收集
一、算法第4版答案:(转载)点击查看前4章答案 点击网上答案查看二、java基础详解:java泛型总结:点击查看java枚举总结:点击查看java堆、栈、方法区、常量池总结:点击查看java并发总结一:点击查看java并发总结二:点击查看java并发总结三:点击查看javaIO总结:点击查看...转载 2018-08-08 19:51:39 · 366 阅读 · 0 评论 -
数据结构可复用类库设计
一、数据结构(数据的存储形式)1. 数据结构的分类:逻辑结构: 集合结构、线性结构、树形结构、图形结构物理结构: 顺序结构、链接结构 (具体的图形就不画了,自己看数据结构的书)2. 什么是程序?(1)高效的程序 = 恰当的数据结构 + 合适的算法 (2)程序的特性:可读性、健壮性、性价比3. 算法(1)算法是独立存在的一种解决问题的方法和思想(对于...原创 2018-07-04 20:52:07 · 763 阅读 · 0 评论 -
国际象棋皇后问题
皇后问题求解(1)八皇后问题: (2)求解思路: (3)代码实现:#include <iostream>#include "Object.h"#include "LinkList.h"using namespace std;using namespace MyLib;template <int SIZE>class QueueSolu...原创 2018-02-11 18:39:38 · 2862 阅读 · 0 评论 -
KMP子串匹配查找算法
1. 子串匹配的朴素解法(1)将当前子串与目标串进行比较,每次移动一位, 若匹配失败,则向右再移动一位,直到将目标串查找完。 (2)图解: (3)代码描述: 返回目标串出现子串的第一个下标位置。int sub_str_index(const char* s, const char* p){ int ret = -1; int slen = strlen(s);...原创 2018-02-10 12:37:44 · 1785 阅读 · 0 评论 -
栈和队列的转换
1. 用两个栈实现队列(1)问题分析:用栈实现队列等价于用后进先出的特性实现先进先出的特性! (2)实现思路:准备两个栈用于实现队列stack_in和stack_out,当有新元素时,将其压入stack_in;当需要出队列时,将stack_in中的元素逐一弹出压入stack_out中,然后将stack_out的栈顶元素弹出。 (3)解决方案: (4)代码实现:#include...原创 2018-02-08 22:02:43 · 379 阅读 · 0 评论 -
艺术之美--数据结构与算法
该文章是课程学习中的内容作为笔记,方便以后查看,引用请声明出处,谢谢!基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。那技术人究竟都需要修炼哪些“内功”呢?我觉得,无外乎就是大学里的那些基础课程,操作系统、计算机网络、编译原理等等,当然还有数据结构和算法。可是,我们都知道,像《算法导论》这些经典书籍,虽然很全面,但是过...原创 2018-09-30 10:37:59 · 313 阅读 · 0 评论 -
11-排序(上):为什么插入排序比冒泡排序更受欢迎?
排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序...原创 2018-10-16 17:05:10 · 984 阅读 · 0 评论 -
装箱问题之贪心算法
贪心准则: 将问题的每一步抽象出一个公共的最优解。 注意:在一步中不一定能找到最优解优点: 简单快速,容易想清楚问题问题描述:有n和物品,每个物品体积v1, v2, v3……大小不一,但是都小于箱子体积大小V,现在将所有物品都打包装进箱子,要求装完这些物品之后打开的箱子数量尽量小,求打开的箱子数量是多少?思路:1.将所有物品按照体积大小降序排列2.按照箱子打开的顺序,每一次从头遍历箱子结点,原创 2018-01-03 15:02:01 · 19905 阅读 · 2 评论