数据结构与算法
Cowry5
这个作者很懒,什么都没留下…
展开
-
剑指offer (01):赋值运算符函数 (C++ 实现)
1 题目如下为类型 CMystring 的声明,请为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;...原创 2018-08-24 10:03:42 · 468 阅读 · 0 评论 -
剑指offer (02):实现 Singleton 单例模式 (Python 实现详解)
本文大部分内容来自于Python中的单例模式的几种实现方式的及优化 ,在此基础上进行修改,整理。1 题目单例模式(Singleton Pattern)是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。又或者某个服务器程序的配置信息存放在一个文件中,客户端通过一个 A...原创 2018-08-25 16:11:36 · 786 阅读 · 0 评论 -
剑指offer (03):数组中重复的数字 (C++ & Python 实现)
1 题目一 找出数组中重复的数字1.1 描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。1.2 题解方法一将输入的数组排序。从排序的数组...原创 2018-09-12 09:10:47 · 603 阅读 · 0 评论 -
剑指offer (04):二维数组中的查找 (C++ & Python 实现)
1 题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如: ⎡⎣⎢⎢⎢124624788910119121315⎤⎦⎥⎥⎥[128924912471013681115]\begin{bmatrix}1 & 2 & 8 & 9 \\2 & 4 & 9 & 12 \...原创 2018-09-14 21:26:56 · 531 阅读 · 0 评论 -
剑指offer (05):替换字符串中空格 (C++ & Python 实现)
1 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。2 题解2.1 暴力解法 O(n2)依次扫描字符串,遇到空格,则将后面字符向后移动两个单位,并从当前位置开始添加字符%20 。假设字符串长度为 n,对每个空格字符,需要移动后面 O(n) 个字符,因此对于含有 O(n) 个空格字符的字符串而...原创 2018-10-12 10:44:48 · 389 阅读 · 0 评论 -
求解斐波那契第n项的几种解法(含矩阵乘法+快速幂) Python实现
斐波那契数列首先我们来定义一下斐波那契数列:f(n)={0n = 01n = 1f(n−1)+f(n−2)n > 1f(n)= \begin{cases} 0 & \text {n = 0} \\ 1 & \text{n = 1}\\f(n-1)+f(n-2) &...原创 2019-04-20 13:45:38 · 3543 阅读 · 4 评论 -
剑指offer全书题解 (Python)【更新完毕】
文章目录2 实现 Singleton 模式3 找出数组中重复的数字3.2 不修改数组找出重复的数字4 二维数组中的查找5 替换空格6 从尾到头打印链表7 重建二叉树8 二叉树的下一个节点9 用两个栈实现队列9.1 用两个队列实现一个栈10 斐波那契数列另外一种解法:矩阵乘法+快速幂10.2 青蛙跳台阶10.3 青蛙变态跳台阶10.4 矩形覆盖问题11 旋转数组的最小数字二分法12 矩阵中的路径1...原创 2019-08-17 15:44:43 · 3996 阅读 · 2 评论 -
01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数
1 01背包问题有 NNN 件物品和一个容量是 VVV 的背包。每件物品只能使用 一次。第 iii 件物品的体积是 viv_ivi,价值是 wiw_iwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。解析:状态表示:f[i][j] 表示只看前 i 个物品,总体积是 j 的情况下的最大价值。状态转移:不选第 i 个物品,f[i][j] = f[...原创 2019-09-04 17:12:54 · 889 阅读 · 0 评论 -
最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
背包问题思路解决最小硬币找零系列问题。一、01硬币找零问题(01背包)给定不同面额的硬币 coins 和总金额 m。每个硬币最多选择一次。计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。状态表示f[i][j]表示只看前 i 个物品,总价值是j 的情况下的最小硬币数目。状态转移f[i, j] = min(f[i-1, j], f[i-1,...原创 2019-09-18 18:31:16 · 2223 阅读 · 0 评论