
算法
文章平均质量分 68
暗夜无风
专注python/pytorch/ML/DL知识分享,兼顾C/C++/Java知识
展开
-
杨辉三角——使用队列实现
目录数组实现队列实现数组实现void yanghui_triangle(int n){ vector<vector<int>> arr(n, vector<int>(n)); //数组赋值 for (int i = 0; i < n; i++) { arr[i][0] = 1; arr[i][i] = 1; } for (int i = 2; i < n; i++)原创 2021-04-24 15:10:07 · 628 阅读 · 0 评论 -
进制转换:十进制转换为任意进制、任意进制转换为十进制
目录十进制转换为任意进制任意进制转换为十进制十进制转换为任意进制//将10进制数num转换为d进制数void convert_base(int num, int d){ int k; stack<int> stk; while (num) { k = num % d; num = num / d; stk.push(k); } while (!stk.empty()) {原创 2021-04-24 11:30:47 · 1591 阅读 · 1 评论 -
汉诺塔问题——明白一个关键状态轻松理解原理和代码
目录前言一、汉诺塔问题起源问题二、问题分析三、代码实现前言 汉诺塔问题是一个经典的算法问题,是递归、栈等的重要应用。而我认为如果要理解该问题的解法,需要了解其中一个关键状态,即类似动态规划中的状态转移方程,而这个状态就是实现递归算法的关键。这里卖个关子,以下将详细分析汉诺塔问题:一、汉诺塔问题起源 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根原创 2021-04-22 21:32:23 · 1861 阅读 · 1 评论 -
排序算法分析及代码实现——五类九种排序(面试考研必备)
目录一、前言二、插入排序2.1 直接插入排序2.2 折半插入排序2.3 希尔插入排序三、交换排序3.1 冒泡排序3.2 快速排序四、选择排序4.1 简单选择排序4.2 堆排序五、归并排序六、基数排序一、前言 排序算法是一类很经典的算法,在面试中经常被问到,需要我们手撕某个排序算法,或者分析其时间、空间复杂度并与其他算法比较优劣。而在考研中,也是数据结构必考知识,还可能涉及稳定性、内外排序问题,可见排序算法是基础中的基础。以下将仅仅简单分析各类排序算法并贴出代码,更详细地可具体百度某类算法。二、插入排原创 2021-04-19 21:59:14 · 818 阅读 · 0 评论 -
力扣每日一题:179. 最大数
目录题目:179. 最大数示例1示例2示例3示例4提示:解题思路解题代码解题感悟题目:179. 最大数难度: 中等题目:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1输入:nums = [10,2]输出:“210”示例2输入:nums = [3,30,34,5,9]输出:“9534330”示例3输入:nums = [1]输出:“1”示例4输入:nums原创 2021-04-12 21:52:45 · 322 阅读 · 0 评论 -
力扣每日一题:263. 丑数
目录题目:263. 丑数示例1示例2示例3示例4提示:解题思路解题代码(1)直接求余(2)递归解题感悟题目:263. 丑数难度: 简单题目:给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例1输入:n = 6输出:true解释:6 = 2 × 3示例2输入:n = 8输出:true解释:8 = 2 × 2 × 2示例3输入:n = 14输出:false解释原创 2021-04-11 22:35:06 · 346 阅读 · 0 评论 -
约瑟夫问题解析附C/C++代码——使用线段树解决
目录一、何为约瑟夫问题二、朴素法2.1 朴素法-C语言2.2 朴素法-C++三、线段树法四、参考文章一、何为约瑟夫问题约瑟夫问题,也称约瑟夫斯置换。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”。据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个原创 2021-04-05 21:33:21 · 2449 阅读 · 1 评论 -
BM算法的C/C++代码实现
目录关键完整代码关键 BM算法是高效的字符串匹配算法,比KMP算法效率还高,全称为Boyer-Moore算法。算法的基本原理可以看:阮一峰的博客:字符串匹配的Boyer-Moore算法,里面讲解得很详细。使用代码实现该算法有两个关键点:坏字符规则:模式串(短串)从后往前匹配到的第一个不符的字符称为坏字符。这时候只要找到当前坏字符在模式串上一次出现位置,就可:后移位数 = 坏字符的位置 - 搜索词中的上一次出现位置。得到匹配串(长串)的移动位数。好后缀规则:从后往前匹配的相等子串即为好后缀。同原创 2021-03-26 20:35:47 · 2815 阅读 · 2 评论 -
常用数学知识整理——C/C++代码实现
目录一、平年 or 闰年二、最大公约数2.1 辗转相除法三、最小公倍数3.1 穷举法3.2 公式法四、质数 or 合数4.1 判断是否为质数4.2 找到质数序列五、奇数 or 偶数5.1 求余法5.2 位与法写在前头:因为不管生活中或者编程或者是在写数学题的时候,经常遇到一些数学概念模棱两可,可能有时候会用到,但是一段时间过去后记忆就模糊了,这时候又得翻书或者百度。特写此文章用于记忆。一、平年 or 闰年平年365天,闰年366天。闰年判定:能被400整除、或者能被4整除但不能被100整除。其余的原创 2021-03-22 16:39:42 · 1054 阅读 · 0 评论 -
KMP算法:C/C++代码实现
目录前言关键代码参考文章前言KMP算法是很经典且高效率的字符串匹配算法,时间复杂度O(m+n)。而纯暴力的BF算法,时间复杂度为O(mn)。网上解析KMP算法的博客也很多,在后面推荐几个不错的博客理解其原理,在此只贴出代码。关键1.首先需要理解前缀、后缀的概念。比如:字符串"abaab"前缀“a”“ab”“aba”“abaa”后缀“b”“ab”“aab”“baab”2.然后理解next数组的概念next数组逐个存储前缀等于后缀的个数。如:原创 2021-03-21 18:39:06 · 814 阅读 · 1 评论