算法
文章平均质量分 88
MillionMile
只要跑得快,懒惰就追不上
展开
-
每日算法-13 猜数字游戏
题目:你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:你写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个提示,告诉他的猜测数字中有多少位属于数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位属于数字猜对了但是位置不对(称为“Cows”, 奶牛)。朋友根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函数,返回字符串的格式为 xAyB ,x 和 y 都是数字,A 表示公牛,用 B 表示奶牛。xA 表示原创 2020-08-24 09:48:27 · 2759 阅读 · 0 评论 -
每日算法-12 单词规律
题目:给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = “abba”, str = “dog cat cat dog”输出: true示例 2:输入:pattern = “abba”, str = “dog cat cat fish”输出: false示例 3:输入: pattern = “原创 2020-08-24 09:46:11 · 119 阅读 · 0 评论 -
十大经典排序算法解析及优化
在上篇文章《十大经典排序算法(动图演示)》中,已经能够了解各种排序算法的思想逻辑,虽然其中提供了代码,但对其解析却并不够全面,而且使用的是js来进行编写演示。本人根据其上代码转换为PHP,并对其代码进行深入解析,并提供相应的优化方法/思路。因此,本文中重点看的不是内容不是代码,而是代码注释。希望能够帮助大家更好地理解各排序算法的编码思路,掌握算法的各种基本方法。原创 2020-08-05 11:53:52 · 1658 阅读 · 0 评论 -
十大经典排序算法(动图演示)
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。转载 2020-08-03 10:58:07 · 263 阅读 · 0 评论 -
每日算法-11 杨辉三角II
问题给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k) 空间复杂度吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pascals-triangle-ii分析这道题跟昨天做的题“每日算法-10 杨辉三角”差异其实不大,区别在于:index为0时,取的是第1行数据[1],index原创 2020-07-21 11:53:25 · 282 阅读 · 1 评论 -
每日算法-10 杨辉三角
问题给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pascals-triangle分析首先,第一行和第二行,可以直接返回结果,规律从第3行开始如果i=3,那么第[0]个元素肯定是1,原创 2020-07-20 15:19:25 · 264 阅读 · 0 评论 -
每日算法-9 环形列表
问题给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1], pos =原创 2020-07-13 11:43:50 · 810 阅读 · 0 评论 -
每日算法-8 最大子序和
问题给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarray解法:贪心算法解析:按照顺序,数进行累加,而如果累加之后的当前数小于0,负数的加入必将导致和不是最大,那么直接将之前原创 2020-07-10 16:17:34 · 254 阅读 · 0 评论 -
每日算法-7 爬楼梯
爬楼梯(类斐波那契数列)题型,这里记录总结4种解法:1. 递归法2. 动态规划法3. 矩阵法4. 通项公式法原创 2020-07-03 17:12:27 · 4486 阅读 · 1 评论 -
每日算法-6 外观数列
问题给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。注意:整数序列中的每一项将表示为一个字符串。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:第n项外观数列说明11第一项是数字 1211描述前一项,这个数是 1 即 “一个 1 ”,记作 11321描述前一项,这个数是 11 即 “两个 1 ” ,记作 2141211描述前一项,这个数是 21 即 “一个 2 一个 1 ” ,记原创 2020-07-02 16:38:28 · 296 阅读 · 0 评论 -
每日算法-5 有效的括号
问题:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true来源:力扣(LeetCo原创 2020-06-29 15:09:26 · 184 阅读 · 0 评论 -
每日算法-4 最长公共前缀
问题:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-common-prefix解法:一、纵原创 2020-06-28 11:05:23 · 193 阅读 · 0 评论 -
每日算法-3 罗马数字转整数
问题:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数原创 2020-06-24 14:44:32 · 281 阅读 · 0 评论 -
每日算法-2 两数之和
问题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum解法:原创 2020-06-23 09:51:39 · 138 阅读 · 0 评论 -
每日算法-1 买卖股票的最佳时机 II
问题:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格原创 2020-06-22 11:53:21 · 306 阅读 · 0 评论