傅-圣
码龄9年
关注
提问 私信
  • 博客:18,949
    18,949
    总访问量
  • 41
    原创
  • 453,872
    排名
  • 4
    粉丝
  • 0
    铁粉

个人简介:技术向轮子哥看齐,产品向张小龙看齐

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2016-03-28
博客简介:

Charles的博客

博客描述:
编程人生
查看详细资料
个人成就
  • 获得3次点赞
  • 内容获得3次评论
  • 获得4次收藏
创作历程
  • 2篇
    2020年
  • 22篇
    2018年
  • 29篇
    2017年
成就勋章
TA的专栏
  • kotlin
    1篇
  • 造轮子
    1篇
  • python
    27篇
  • 设计模式
    1篇
  • 算法
    18篇
  • 数据结构
    32篇
  • 读书笔记
    23篇
  • 数据库
    2篇
兴趣领域 设置
  • 软件工程
    性能优化
创作活动更多

仓颉编程语言体验有奖征文

仓颉编程语言官网已上线,提供版本下载、在线运行、文档体验等功能。为鼓励更多开发者探索仓颉编程语言,现诚邀各位开发者通过官网在线体验/下载使用,参与仓颉体验有奖征文活动。

368人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Kotlin 系列之let、with、run、apply标准函数解析

Kotlin 中的标准函数指的是在 Standard.kt 中定义的函数,然后我就来写一下我经常会用到的标准函数,顺便做过总结。letkotlin 为了空安全不允许定义为空的,想要定义的话就必须加上问号,但是在实际编码中,有好多情况就好像下面的代码一样mVideoPlayer?.setVideoView(activity.course_video_view)mVideoPlayer?.setControllerView(activity.course_video_controll...
原创
发布博客 2020.09.19 ·
559 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

程序员,你还没造过轮子吗?

在我们程序员的圈子,有一句话非常流行,就是:不要重复造轮子。原文是:Stop Trying to Reinvent the Wheel,意思是:不要重复发明轮子。但是这是两个概念:造轮子和发明轮子。因为前人在发明出圆形的轮子之前,已经尝试过其它形状的轮子了,发现都不成功,最后发现圆形的轮子是成功的,才选择了圆形。这是在发明轮子。那后人肯定就不要再去发明轮子了,因为圆形已经被证明是可用的了。那什么是造轮子呢?就是指改进轮子,于是就有了石轮、木轮、空心木轮和气轮等。这就叫造轮子。从...
原创
发布博客 2020.09.07 ·
636 阅读 ·
1 点赞 ·
3 评论 ·
0 收藏

《剑指offer》(面试题34):丑数

题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路同样的,我们首先想到的可能就是遍历判断,但是每个数都要计算一次是不是ugly,很是麻烦。于是我们想,能不能只对ugly进行计算呢,显然是可以的。我们用一个数组来从小到大存
转载
发布博客 2018.02.03 ·
355 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题27):二叉搜索树与双向链表

前言在计算机领域有一类算法叫分治法,即“分而治之”。采用的就是各个击破的思想,我们把分解后的小问题各个解决,然后把小问题的解决方案结合起来解决大问题。题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路哇偶,中序遍历啊!中序遍历,递归和循环都可以撒~二叉搜索树是一种排序
转载
发布博客 2018.02.02 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题24):二叉搜索树的后序遍历序列

前言:当一眼看不出问题中隐藏的规律时,我们可以试着用一两个具体的例子模拟操作的过程,说不定这样那就能通过具体的例子找到抽象的规律。题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路深度优先遍历中的先序遍历、中序遍历、后序遍历,都是针对在遍历中根结点的位
转载
发布博客 2018.02.02 ·
222 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题23):从上往下打印二叉树

前言:当一眼看不出问题中隐藏的规律时,我们可以试着用一两个具体的例子模拟操作的过程,说不定这样那就能通过具体的例子找到抽象的规律。题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路再熟悉不过的层序遍历,BFS即可实现。用队列来进行层序遍历,同时用一个vector容器来存储每一层的值。举例如下:python 代码
转载
发布博客 2018.02.02 ·
228 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题21):包含min函数的栈

前言:当一眼看不出问题中隐藏的规律的时候,我们可以试着用一两个例子模拟操作的过程,这样说不定就能通过具体的例子找到抽象的规律。可以举出一两个例子,告诉面试官问的算法是怎么一步步处理这个例子的。模拟压栈和弹出几个数字,分析每次操作之后数据栈,辅助栈和最小值是什么?怎么检查代码呢?可以运行几个测试用例。题目描述定义栈的数据结构,请在该类型
转载
发布博客 2018.02.02 ·
206 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

(未完成)《剑指offer》(面试题18):树的子结构

在面试的时候,我们一定要注意边界条件的检查,即检查空指针。当树 A 或树 B 为空的时候,定义相应的输出。可以分成两步:第一步在树 A 中找到和 B 的根结点的值一样的结点 R,第二步再判断树 A 中以 R 为根节点的子树是不是包含和树  B 一样的结构。
原创
发布博客 2018.02.01 ·
149 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题17):合并两个排序的链表

在面试过程中,最容易犯两种错误:一是在写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开了要么并没有做到递增排序;二是代码在鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃。题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路递归:新创建一个指针就可以,比较两个链表的值,然后做相应
转载
发布博客 2018.02.01 ·
169 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

(未完成)《剑指offer》(面试题16):反转链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。以这道题为例,我们至少应该想到几类测试用例对代码做功能测试:输入的链表头指针是 NULL。输入的链表只有一个结点。输入的链表有多个结点。
原创
发布博客 2018.02.01 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题15):链表中倒数第k个结点

代码的鲁棒性(robust)提高代码的鲁棒性的有效途径是进行防御性编程。其实也是一种编程习惯,是指预见在什么地方可能会出现问题,并为这些可能出现的问题制定处理方式。比如试图打开文件时发现文件不存在,我们可以提示用户检查文件名和路径;在面试时,最简单的防御性编程就是在函数入口添加代码已验证用户输入是否符合要求。我们需要格外关注这些函数的输入参数。如果输入的是一个指针,那指针是
转载
发布博客 2018.02.01 ·
136 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题14):调整数组顺序使奇数位于偶数前面

总结:考虑可扩展性的解法,能秒杀 offer面试官期待我们提供的不仅仅是解决一个问题的办法,而是解决一系列同类型问题的通用办法。这就是面试官在考查我们对扩展性的理解。题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路方法一
原创
发布博客 2018.02.01 ·
193 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题13):在O(1)时间删除链表结点

题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点。之所以需要从头开始查找,是因为我们需要得到将删除的结点的前面一个结点。在单向链表中,结点中没有指向前一个结点的指针,所以只好从链表的头结点开始顺序查找。我们可以很方便地得到要删除的结点的下一结点。如果我们把下一结点的内容复制到需要删除的结点上覆盖原有的内容,再把下一个结点删除,那是不是就相当于
原创
发布博客 2018.02.01 ·
238 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题11):数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路方法一:公式求解我们知道当指数为负数的时候,可以先对指针求绝对值,然后算出次方的结果之后再取倒数。如果要自己实现,那么就需要考虑各种错误处理和边界问题。比如,既然有求倒数,对0求倒数怎么办,当底数是0且指数是负数的时候,如果不做特殊处理,就会
原创
发布博客 2018.02.01 ·
183 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(第三章):高质量的代码

总结:一般会考查代码的容错处理能力,对一些特别的输入会询问应聘人员是否考虑,如何处理。不能容忍diamante只是针对一种假想的 “正常值” 进行处理,不考虑异常情况,也不考虑资源的回收等问题。书写,布局和命名都决定着代码的规范性。从功能测试,边界测试,负面测试3个方面设计测试用例,以保证代码的完整性。首先考虑的是普通功能测试的测试用例。考虑功能测试
原创
发布博客 2018.02.01 ·
173 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题10):二进制中1的个数

位运算位运算是把数字用二进制表示之后,对每一位上 0 或者 1 的运算。因为位运算总共只有五种运算:与,或,异或,左移和右移与(&) 0&0=0     1 & 0 = 0     0 & 1 = 0     1 & 1 = 1或(|)   0 | 0 = 0     1 | 0 = 1     0 | 1 = 1     1 | 1 = 1异或(^
原创
发布博客 2018.01.31 ·
176 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题9):斐波那契数列

前言如果我们需要重复地多次计算相同的问题,通常可以选择用递归或者循环两种不同的方法。递归式在一个函数的内部调用这个函数自身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。通常递归的代码会比较简洁。在面试的时候,如果面试官没有特别的要求,应聘者可以尽量多采用递归。递归虽然有简介的优点,但它同时也有显著的缺点,那就是时间和空间的消耗:每一次函数调用,都需要
原创
发布博客 2018.01.31 ·
274 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

(未完成)《剑指offer》(面试题8):旋转数组的最小数字

其中排序和查找是面试时考察算法的重点。在准备面试的时候,我们应该重点掌握二分查找,归并排序和快速排序,做到能随时正确,完整地写出他们的代码。如果面试题是要求在排序的数组(或者部分排序的数组)中查找一个数字或者统计某个数字出现的次数,我们都可以尝试用二分查找算法。查找相对而言较为简单,不外乎顺序查找,二分查找,哈希表查找和二叉排序树查找。排序比查找要复杂一些。
原创
发布博客 2018.01.31 ·
257 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题7):用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:栈:后进先出(LIFO); 队列:先进先出(FIFO). 入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈python 代码实现:# -*- coding:utf
原创
发布博客 2018.01.31 ·
164 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

《剑指offer》(面试题6):重建二叉树

面试的时候提到的树,大部分都是二叉树。所谓二叉树是树的一种特殊结构,在二叉树中每个结点最多只能有两个子结点。在二叉树中最重要的操作莫过于遍历,即按照某一顺序访问树中的所有结点。通常树有如下几种遍历方式:前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。特例
原创
发布博客 2018.01.31 ·
142 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多