- 博客(34)
- 收藏
- 关注
原创 C++ 异常:std::bad_alloc, 内存不够了,如何减少代码内存?
对于非嵌入式开发中,空间复杂度相比于时间复杂度确实显得没那么重要,能用数组的都可以尽量避免使用链表,这样减少了代码复杂度,减少了时间复杂度。但是对于一些算法题,对内存有要求的就会出现问题。正如标题所说的,出现bad_alloc异常,一查就知道原来是内存出现了问题。我首先想到是会不会是堆栈溢出,但是很快被我否决,因为代码中我并没有使用递归,也最多就三层函数调用。于是我就查看自己定义的变量...
2020-08-12 10:15:38
13568
5
原创 快手实习生面试(C++,一面凉)
中兴的比赛终于结束,终于有时间来回顾一下上次惨不忍睹的面试,害,说实话还是我第一次找工作的面试,居然还是视频面试,中间麦克风也各种出问题,磕磕绊绊面了大概一个小时左右吧,然后就结束了,这里回顾一下面试中的问题以及步骤吧,问题无先后顺序。1 自我介绍(略)2 如何解决菱形继承问题这个问题有印象,当时答地是,基类对象函数必须为纯虚函数。然后面试官也没说对错,就问了下还有别的吗,然后我就说没了。面试官也没说对错就开始下一问了。我查了下,错的太离谱了...答案:两个派生类继承同一个基类,又有某个类同时继
2020-05-09 17:24:08
1570
1
原创 2020中兴捧月算法精英挑战赛-迪杰斯特拉派初赛(未来城市物流系统)总结
疫情关系,导致科研一直没法开展,老板着急,自己也无所事事。在清明过后看到了中兴的算法精英挑战赛,然后就开始了算法之旅,这里自己做一点总结,为自己以后争取点教训吧。数据分析的重要性这次比赛真的让我体验到了前期工作的重要性,因为这次比赛是我第一次单人赛,像去年参加华为软挑时都是有队友的,很多前期题目解析、数据分析的工作都由他们完成了,我也主要是在他们的思路之上思考算法。所以这次比赛,我前期工作并没有做的很充足,拿着题目就开始写代码了。根据门派名字就知道,肯定是和迪杰斯特拉算法有关,而且和去年的软挑有一定
2020-05-09 15:02:02
1237
3
原创 数据结构与算法——排序之希尔排序
希尔排序是插入排序的升级版,所以呀我们先贴上插入排序算法的源码吧//插入排序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
192
原创 数据结构与算法——排序之堆排序(递归与迭代)
堆排序源码(时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
320
原创 数据结构与算法——排序之归并排序(递归与迭代)
归并排序源码//合并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
261
原创 数据结构与算法——二叉树的打印
二叉树的打印这里开始我的数据结构复习之路,很多东西都没有讲到,只是希望起到一个抛砖引玉的作用。当然这里我自己也是参考某网的视频之后的。鉴于时间关系有些题目没在实现对代码的实现,如果有需要的话,可以留言告诉我,我很乐意去解决。二叉树的打印是根据遍历方法来的,有前序遍历、中序遍历、后续遍历以及层序遍历。前三种估计很熟悉了,那么这个讲讲层序遍历。在学过图后,我们知道了广度优先搜索,这里就是同...
2019-12-10 17:04:13
1498
原创 linux下文件拓展:ftruncate 和 lseek的区别
给自己做个笔记,折腾了我一晚上,我就长话短说。ftruncate其实ftruncate 比较正式的叫法是文件截断,用来截取尾端的一些数据。 原型: int truncate(const char *pathname, off_t length); int ftruncate(int fd, pff_t length);成功返回0,失败返回 ...
2019-09-26 21:00:23
963
原创 c++中string类是定义在std命名空间
今天我在练习的时候,突然发现一个问题,我在建一个类的时候,明明加了头文件的可是却还是用不了?如下:#include <string>class Staff{public:private: string m_name; //报错};我感到十分困惑,我明明加了头文件了呀。我想的时候,在平时这样用好像没问题呀,如下:#define _CRT_SECUR...
2019-09-24 11:18:35
1636
原创 cJSON详细剖析(十)----总结一
cJSON的内容真的不多,毕竟我们只是去查看而不是自己去写,所以总归看得还是很快的。我们毕竟不是自己做项目,只是针对前人做的东西进行理解,学习别人的编程思维。因为cJSON毕竟使用c写的,语法涉及的也并不多,无非就是指针的来回应用,这也说明指针的强大,指针也正是c语言的精髓。然后针对个人的阅读,对cJSON涉及到的知识而自己又不太熟悉的地方做一些总结。const关键词的应用没错,我就想来讲...
2019-09-21 16:38:49
420
原创 cJSON详细剖析(六)----print_string_ptr()函数(补充)
我又重新把之前的写的博客看了一遍,写的是什么狗屁,我自己看得都费劲,这里我重开一博客把之前在剖析(四)里的内容摘取出来。在分析print_object()函数时,对于出现的print_String_ptr()函数,我们做进一步的分析。下面就是print_String_ptr()函数,我已经贴好了注释,针对给定的text文件,就返回"\"name\""了。当然,上述针对的给定的text字...
2019-09-20 19:30:34
923
原创 cJSON详细剖析(九)----create_objects()/cJSON_AddItemToObject()函数
这里我们针对test.c里面的create_objects()函数进行向下解析。如上图框住的部分,我们就此来分析cJSON_AddItemToObject()函数。根据参数我们先分析cJSON_CreateString()函数。cJSON_CreateString()此函数在cJSON里面用了一行,为了更好的阅读,我把它按照正常的形式展开了。这段代码很简单,就是新建一个item的c...
2019-09-20 14:48:27
13411
原创 cJSON详细剖析(八)----dofile()函数
本想着明天若有时间的话,明天写的,但是,看了看代码,发现很简单。。。所以我就干脆提上日程,今晚把这个给分析了。如上图,我把代码按分号分行也才十来行。一看就很简单嘛。一些简单的注释我写在了后面。我一个一个解释下,权当给自己再学习学习。fopen(文件名,使用文件方式)打开一个文件,返回一个FILE文件指针,第一个参数是文件的地址,可以是绝对地址或者相对地址。第二个参数是打开的方式。...
2019-09-19 21:48:44
551
原创 cJSON详细剖析(七)----print_value()函数
从 剖析 五 我们可以发现,value()函数里面的print_number()函数以及print_array()函数应该是比较简单的函数。如下图,在剖析四里面,我们分析了print_object()函数,虽然没有分析print_string()函数,当时其调用的都是同一个函数print_string_ptr()。下面我们把另外俩也分析了。print_number()函数这个函数涉及的...
2019-09-18 15:17:19
2150
原创 cJSON详细分析(五)----parse_value()函数(补充)
因为之前我们给出的例子里面刚开始部分只是涉及到parse_string()函数,我们也只讲了这部分,现在我把parse_value()涉及到的其他几个函数也一起学习一下。parse_number()函数我们先来分析parse_number()函数,根据上图黄色框框住的部分我们知道,parse_number()是用来分析数字或' - '的,那个减号肯定指的是负数嘛。我们跳转进去。代码很简...
2019-09-18 12:44:51
1634
原创 cJSON详细剖析(四)----cJSON_Print()函数
今天我们讲讲cJSON_Print(json)函数时怎么实现的,我们按住F12点进去(vs编译器)。如上图,我们继续跳。因为p为null,所以这里在else里选中print_object()继续跳转。print_object()print_object()应该算是第一个有内容的函数了,这里我们分析这个print_object()函数。上面图中我做了部分注释,根据...
2019-09-15 11:59:26
21882
3
原创 cISON详细剖析(三)-----parse_object()函数
根据上一个博客,我们应该是调回了parse_object(),为了看得更清楚,我继续把框图贴出来,如下图。那今天我们就来看看parse_object()函数。parse_object()我先把这个函数贴出来。因为有点长,为了清晰的看见我分开为俩部分,中间有一些我做了简单的注释。开头部分我们先看上面这部分,这也是比较简单的部分,我说简单是因为上篇博客分析过了红色框住的部分,感...
2019-09-14 20:42:47
889
原创 cJSON详细剖析(二)——doit(char *text)函数框架及parse_string()函数分析
这里开始第二篇博客,正式的开始分析函数。doit(char *text)先分析main()函数里面出现的第一个函数吧,doit()这个函数前面有英文的简单介绍此函数是干什么的,大概意思就是将文本解析为JSON格式,然后在转化为文本格式,最后进行打印。我把一些代码自己的注释在了代码后边,如下图:我先把text给贴出来方面大家对着代码观看:我觉得这位作者代码功底很扎实(皮一下很...
2019-09-14 11:17:09
1804
2
原创 cJSON详细剖析(一)----框架
先发发牢骚,作为一个非科班生,最痛苦的就是找不到项目可做。在b站长听了博主codesheep的项目推荐,决定先看看一些写的比较好的源码。第一个就推荐了cJSON,说简单嘛,也就五六百行。今天开始看,争取在科研闲暇之时早点搞完。加油加油,我尽量写的详细一点,不管是给自己还是给读者尽量好的理解。cJSON是一种轻量级的数据交换格式,也可以理解为一种语法。我的理解就是将某一种不友好阅读文本转化为友好...
2019-09-13 16:18:18
1025
2
原创 动态规划(一)一一状态定义和状态转移方程
动态规划真让人看得头疼,这只是一种思想,并没有一定的解题规律,当问题出现的时候,对于不太熟悉动态规划的人来说,确实有点难以想到,一般都是采用暴力求法。这里贴一个知乎链接,我觉得动态规划讲的还挺好的,什么是动态规划?嘿嘿,也不知道会不会有人还会跳回来看看,哈哈。反正是写给自己的,问题不大。既然理解了上面是动态规划,就来几个简单的题目来练练手(题目来源leetcode)。1 最大子序和...
2019-09-12 11:15:01
32547
6
原创 并查集及其应用
作为一个非科班生,并没有学过离散数学(貌似离散数学里面讲到了并查集,讲错勿怪),第一次接触到并查集是在看数据结构中的Kruskal算法的时候了解的。当时看的是云里雾里。然后就在网上找资料,看了很多,终于找到了一篇讲并查集讲的特别好的。看完特别舒适。附上网址:https://blog.csdn.net/niushuai666/article/details/6662911好了,这里我就不写并...
2019-09-02 19:20:32
1276
原创 关于树与递归关系的剖析
一提到树与递归,我想大家印象应该真的是很深了!从二叉树的遍历开始,我们就知道递归在树中占据的重要地位。因为树这个数据结构有很强的规律性。特别是二叉树。所以在做树相关的题型或者能通过树数据结构表示出来的数据结构联想到递归或者迭代是最基本的思想,而递归也能使代码更加的简洁。 遍历 题型leetcode112 路径总和leetcode 101 对称二叉树leetcode 100...
2019-09-01 10:00:06
1371
原创 文件操作之read,write,open
read 格式:#include <unistd.h>seze_t read(int fildes, void *buf, size_t nbytes);read的作用是从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并放到buf里面。返回的是实际读入的字节数,可能会小于请求的字节数(nbytes)。返回0 表示的是没有读入任何字节,表示已经达...
2019-08-31 15:23:02
454
原创 注意: 空串 和 nullptr 以及NULL是不同
如题,例如这样定义一个 string s = nullptr; 是错误的。正确的应该是: string s = ""; 或者 string s ("");
2019-08-28 21:43:52
202
原创 冒泡算法的巧妙利用
对于某一数组,为完成某个任务,我们可能需要对数组进行排序,这也是十分常见的解题方案。为减少时间复杂度,一般情况我们一上来就使用快速排序,既简单有高效。但也要具体问题具体分析。如下面这道leetcode题。当我们使用快速排序先对数组进行排序时,那说明你要上当了。 有题目知道,我们只要找到三条边满足较小的俩边大于第三边即可。所有在排序找到最大的三条边之后就可以...
2019-08-27 21:47:18
123
原创 谈数组的一种巧妙利用--leetcode 1122
平时我们在做题的时候,用到数组时,都是用数组来保存值,通过数组下标来索引。 其实还有另外一种巧妙的用法,如果我们需要保存的值不是很大,而且我们需要知道每一个值的数量。那么我们就可以考虑下面这种方法。 建立一个数组 arr[max + 1], 其中max表示可能出现的最大值。那么例如 arr[index]表示的就是记录中的 index值的数量为ar...
2019-08-27 14:39:28
239
原创 基于链表实现(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
1786
原创 跳出while(!StdIn.isEmpty())问题
package com.ali.exercises01_03;import edu.princeton.cs.algs4.Stack;import edu.princeton.cs.algs4.StdIn;public class EvaluatePostfix { /** * @param argsa */ public static void main(Strin...
2019-02-27 14:34:14
1761
4
原创 算法练习1.3.43数组求法
package com.ali.exercises01_03;import java.io.File;import java.util.Scanner;public class Ex1_3_43 { /** * @param args * */ public static void main(String[] args) { //C:\Users\85190\D...
2019-02-26 21:26:57
135
原创 算法练习题1.3.30,反转链表递归法分析
首先,递归法代码如下:public Node reverse(Node first) { if (first == null) return null; if (first.next == null) return first; Node second = first.next; Node rest = revers...
2019-02-24 17:20:19
108
原创 累加器求方差和标准差
public class Accumulator { private double m; private double s; private int N; public void addDataValue(double x) { N++; s = s + 1.0 * (N - 1) / N * (x - m) * (x - m); m = m + (...
2019-02-21 21:55:55
927
1
转载 java 关键字 assert的学习
jilodream/王若伊_恩赐解脱(博客链接:http://www.cnblogs.com/jilodream/)
2019-02-21 20:04:43
279
原创 算法学习笔记_2
今天是学习的第二天,额,效率有点低。针对昨天的问题,百度了一下以及看了会源码(源码看得似懂非懂)还没找到答案...先搁置在这吧,题.1.1.31自己写的代码如下:public static void randomConnection(double x, double y, double r, int N, double p) { //draw circle StdDra...
2019-01-24 21:29:12
126
原创 算法学习笔记_1
好吧,终于打算开始学下算法了,就把这当做笔记本吧。 疑问: 1.为什么用算法(第4版)上的打印StdOut.println()会出现乱码?用System.out.println()却正常,问题出在哪? 今天比较晚了,明天再来解决这个问题吧 ...
2019-01-23 21:42:14
120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人