数据结构与算法
ShuoPro
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
展开
-
快手实习生面试(C++,一面凉)
中兴的比赛终于结束,终于有时间来回顾一下上次惨不忍睹的面试,害,说实话还是我第一次找工作的面试,居然还是视频面试,中间麦克风也各种出问题,磕磕绊绊面了大概一个小时左右吧,然后就结束了,这里回顾一下面试中的问题以及步骤吧,问题无先后顺序。1 自我介绍(略)2 如何解决菱形继承问题这个问题有印象,当时答地是,基类对象函数必须为纯虚函数。然后面试官也没说对错,就问了下还有别的吗,然后我就说没了。面试官也没说对错就开始下一问了。我查了下,错的太离谱了...答案:两个派生类继承同一个基类,又有某个类同时继原创 2020-05-09 17:24:08 · 1535 阅读 · 1 评论 -
2020中兴捧月算法精英挑战赛-迪杰斯特拉派初赛(未来城市物流系统)总结
疫情关系,导致科研一直没法开展,老板着急,自己也无所事事。在清明过后看到了中兴的算法精英挑战赛,然后就开始了算法之旅,这里自己做一点总结,为自己以后争取点教训吧。数据分析的重要性这次比赛真的让我体验到了前期工作的重要性,因为这次比赛是我第一次单人赛,像去年参加华为软挑时都是有队友的,很多前期题目解析、数据分析的工作都由他们完成了,我也主要是在他们的思路之上思考算法。所以这次比赛,我前期工作并没有做的很充足,拿着题目就开始写代码了。根据门派名字就知道,肯定是和迪杰斯特拉算法有关,而且和去年的软挑有一定原创 2020-05-09 15:02:02 · 1210 阅读 · 3 评论 -
C++ 异常:std::bad_alloc, 内存不够了,如何减少代码内存?
对于非嵌入式开发中,空间复杂度相比于时间复杂度确实显得没那么重要,能用数组的都可以尽量避免使用链表,这样减少了代码复杂度,减少了时间复杂度。但是对于一些算法题,对内存有要求的就会出现问题。正如标题所说的,出现bad_alloc异常,一查就知道原来是内存出现了问题。我首先想到是会不会是堆栈溢出,但是很快被我否决,因为代码中我并没有使用递归,也最多就三层函数调用。于是我就查看自己定义的变量...原创 2020-08-12 10:15:38 · 13186 阅读 · 5 评论 -
数据结构与算法——排序之希尔排序
希尔排序是插入排序的升级版,所以呀我们先贴上插入排序算法的源码吧//插入排序void InsertSort(int arr[], int num) { int j; for (int i = 1; i < num; i++) { if (arr[i] < arr[i - 1]) { int t...原创 2019-12-12 20:06:32 · 179 阅读 · 0 评论 -
数据结构与算法——排序之堆排序(递归与迭代)
堆排序源码(时O(N*logN),空O(1))/* 这里不妨先回忆一下,完全二叉树的性质: 如果对一颗有n个结点的完全二叉树的结点按层序编号(从上到下,从左到右),对任意结点i(1 <= i <= n): 1 如果i= 1,则结点i是二叉树的根,无双亲;如果i > 1,则其双亲是节点i/2. 2 如果2i > 0,则结点i无左孩子(其实...原创 2019-12-12 17:18:21 · 300 阅读 · 0 评论 -
数据结构与算法——排序之归并排序(递归与迭代)
归并排序源码//合并void Merge(int arr[],int start,int end,int mid,int* tmp) { int i_start = start; int i_end = mid; int j_start = mid + 1; int j_end = end; int length = 0; while...原创 2019-12-12 16:53:56 · 245 阅读 · 0 评论 -
数据结构与算法——二叉树的打印
二叉树的打印这里开始我的数据结构复习之路,很多东西都没有讲到,只是希望起到一个抛砖引玉的作用。当然这里我自己也是参考某网的视频之后的。鉴于时间关系有些题目没在实现对代码的实现,如果有需要的话,可以留言告诉我,我很乐意去解决。二叉树的打印是根据遍历方法来的,有前序遍历、中序遍历、后续遍历以及层序遍历。前三种估计很熟悉了,那么这个讲讲层序遍历。在学过图后,我们知道了广度优先搜索,这里就是同...原创 2019-12-10 17:04:13 · 1443 阅读 · 0 评论 -
动态规划(一)一一状态定义和状态转移方程
动态规划真让人看得头疼,这只是一种思想,并没有一定的解题规律,当问题出现的时候,对于不太熟悉动态规划的人来说,确实有点难以想到,一般都是采用暴力求法。这里贴一个知乎链接,我觉得动态规划讲的还挺好的,什么是动态规划?嘿嘿,也不知道会不会有人还会跳回来看看,哈哈。反正是写给自己的,问题不大。既然理解了上面是动态规划,就来几个简单的题目来练练手(题目来源leetcode)。1 最大子序和...原创 2019-09-12 11:15:01 · 31688 阅读 · 6 评论 -
并查集及其应用
作为一个非科班生,并没有学过离散数学(貌似离散数学里面讲到了并查集,讲错勿怪),第一次接触到并查集是在看数据结构中的Kruskal算法的时候了解的。当时看的是云里雾里。然后就在网上找资料,看了很多,终于找到了一篇讲并查集讲的特别好的。看完特别舒适。附上网址:https://blog.csdn.net/niushuai666/article/details/6662911好了,这里我就不写并...原创 2019-09-02 19:20:32 · 1261 阅读 · 0 评论 -
关于树与递归关系的剖析
一提到树与递归,我想大家印象应该真的是很深了!从二叉树的遍历开始,我们就知道递归在树中占据的重要地位。因为树这个数据结构有很强的规律性。特别是二叉树。所以在做树相关的题型或者能通过树数据结构表示出来的数据结构联想到递归或者迭代是最基本的思想,而递归也能使代码更加的简洁。 遍历 题型leetcode112 路径总和leetcode 101 对称二叉树leetcode 100...原创 2019-09-01 10:00:06 · 1332 阅读 · 0 评论 -
冒泡算法的巧妙利用
对于某一数组,为完成某个任务,我们可能需要对数组进行排序,这也是十分常见的解题方案。为减少时间复杂度,一般情况我们一上来就使用快速排序,既简单有高效。但也要具体问题具体分析。如下面这道leetcode题。当我们使用快速排序先对数组进行排序时,那说明你要上当了。 有题目知道,我们只要找到三条边满足较小的俩边大于第三边即可。所有在排序找到最大的三条边之后就可以...原创 2019-08-27 21:47:18 · 109 阅读 · 0 评论 -
谈数组的一种巧妙利用--leetcode 1122
平时我们在做题的时候,用到数组时,都是用数组来保存值,通过数组下标来索引。 其实还有另外一种巧妙的用法,如果我们需要保存的值不是很大,而且我们需要知道每一个值的数量。那么我们就可以考虑下面这种方法。 建立一个数组 arr[max + 1], 其中max表示可能出现的最大值。那么例如 arr[index]表示的就是记录中的 index值的数量为ar...原创 2019-08-27 14:39:28 · 221 阅读 · 0 评论 -
基于链表实现(java)的多项式加法和乘法
package com.baidu.line;import java.util.Scanner;public class Dolynomial { private Node first; private Node last; private int N; private class Node{ int coef; //存放系数 int expo; //存放指数...原创 2019-03-07 12:52:32 · 1769 阅读 · 0 评论