![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
汐客SeaKr
这个作者很懒,什么都没留下…
展开
-
回旋矩阵 - 由外到内 lua实现
代码:-- 由外到内的回旋矩阵local w, h = 9, 7 -- 宽高local x, y = 1, 1 -- 数字矩阵角标local dx, dy = 0, 1 -- 下个数字的增量local cnt = 1 -- 初始值local arr = {}-- 初始化arrfor i=1,h do for j=1,w do if arr[i] == nil then...原创 2020-02-12 10:46:16 · 202 阅读 · 0 评论 -
回旋矩阵 - 由内到外 python实现
代码:#内螺旋矩阵def interSpiralMatrix(size, a=0, b=0): #size必须是奇数 if (size % 2 != 1): size += 1 #初始化矩阵 spiralMatrix = [([0] * size) for i in range(size)] # print(spiralMatrix...原创 2020-02-11 23:04:32 · 648 阅读 · 0 评论 -
取下界的二分查找
-- 取下界的二分查找,未找到目标值,则取比目标值小的最近的数-- 时间复杂度 log2nfunction LC(a, obj) local max, start, end1 = -1, 1, #a while start <= end1 do local mid = math.modf(start+(end1-start)/2) ...原创 2020-02-09 14:29:03 · 673 阅读 · 0 评论 -
44. 通配符匹配 - lua实现
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。来源:力扣(LeetCode)链接...原创 2019-11-28 16:00:40 · 1274 阅读 · 0 评论 -
二叉树的三种遍历,前序遍历、中序遍历和后序遍历 - lua
三种遍历方式仅存在遍历节点顺序的不同而已1、前序遍历 preOrder 遍历顺序:根节点->左子树->右子树2、中序遍历 inOrder 遍历顺序:左子树->根节点->右子树3、后序遍历 afterOrder 遍历顺序:左子树->右子树-->根节点二叉树如图:前序遍历:1 24 35中序遍历:42 1 35后序遍历:42...原创 2019-11-21 15:01:25 · 600 阅读 · 0 评论 -
双指针算法技巧的「滑动窗口」框架
题目案例:最小覆盖子串 - lua实现找到字符串中所有字母异位词 - lua实现无重复字符的最长子串 - lua实现滑动窗口算法思路:1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。2、我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的...原创 2019-11-19 17:48:28 · 364 阅读 · 0 评论 -
无重复字符的最长子串 - lua实现
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",...原创 2019-11-19 17:36:58 · 216 阅读 · 0 评论 -
找到字符串中所有字母异位词 - lua实现
给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。示例 1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于...原创 2019-11-19 16:44:36 · 148 阅读 · 0 评论 -
最小覆盖子串 - lua实现
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode...原创 2019-11-19 15:49:02 · 138 阅读 · 0 评论 -
独一无二的出现次数 - lua
你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入...原创 2019-11-19 12:20:36 · 214 阅读 · 0 评论 -
计算右侧小于当前元素的个数 - 归并与索引数组应用 - lua实现
给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右侧仅有 1 个更小的元素 (1).6 的右侧有 1 个更小的元素 (1).1 ...原创 2019-11-18 18:22:23 · 120 阅读 · 0 评论 -
归并排序(分治法)- lua实现
归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。(1)稳定性归并排序是一种稳定的排序。(2)时间复杂度对长度为n的文件,需进行趟二路归并,每趟归并的时间为O...原创 2019-11-18 15:05:01 · 685 阅读 · 0 评论 -
寻找旋转排序数组中的最小值 - lua实现
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。(此处代码有重复元素时同样适用)示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0来源:力扣(LeetCode)链接:...原创 2019-11-16 15:09:56 · 318 阅读 · 0 评论 -
“气球” 的最大数量 - lua实现
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。示例 1:输入:text = "nlaebolko"输出:1示例 2:输入:text = "loonbalxballpoon"输出:2示例 3:输入:text = "le...原创 2019-11-15 17:51:43 · 79 阅读 · 0 评论 -
寻找两个有序数组的中位数 - lua实现
寻找两个有序数组的中位数给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4...原创 2019-11-14 20:04:01 · 299 阅读 · 0 评论 -
递归求解汉诺塔问题 - Python实现
汉诺塔(港台:河内塔)是根据一个传说形成的数学问题:有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:每次只能移动一个圆盘; 大盘不能叠在小盘上面。提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回 A 杆,但都必须遵循上述两条规则。问:如何移?最少要移动多少次?...原创 2019-11-14 10:18:29 · 631 阅读 · 0 评论 -
判断两个矩形是否重叠相交 - Lua实现
首先规定 矩形Rect:-- x1 最左部 x2 最右部 y1 最底部 y2 最顶部Rect = { x1 = 0, x2 = 0, y1 = 0, y2 = 0,}解决思路1:正向求解,考虑所有重叠的情况。可以看出情况(1)、(2)、(3)可以转换为线段相交的问题,最后再对情况(4)做处理即可。代码:-- 两线段相交 判断...原创 2019-11-08 11:59:02 · 730 阅读 · 2 评论 -
快速排序 - Lua语言实现
快速排序 - 选一基准元素,依次将剩余元素中小于该基准元素的值放置其左侧,大于等于该基准元素的值放置其右侧;然后,取基准元素的前半部分和后半部分分别进行同样的处理;以此类推,直至各子序列剩余一个元素时,即排序完成(类比二叉树的思想,from up to down)平均时间复杂度:O(NlogN) 稳定性:不稳定特点:快速排序在最坏的情况下时间复杂度是O(n**2),平均时间复杂度是O(...原创 2019-10-29 20:30:12 · 719 阅读 · 0 评论 -
斐波那契数列的递归与非递归解决方法 - Lua实现
斐波那契数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。求取第n项值得问题。递归解法:-- 此算法为斐波那契数列求和的传统算法-- 时间复杂度为2^n 指数型时间复杂度算法 local function Fbnq1(n) -- b...原创 2019-10-24 21:09:23 · 621 阅读 · 0 评论 -
一次遍历求取链表的中间节点 - Lua实现
lua实现链表的方法请参照Lua实现单链表及链表操作本文所有api参照上述链接,此处主要讲如何解决题目中的问题。核心思路是双指针法:即遍历链表时,fNode快指针每次前进2个位置,sNode慢指针每次前进1个位置。-- 求取中间节点方法function FindMidNode(list) -- body -- 快慢指针指向链表头 sNode = list...原创 2019-10-22 16:29:15 · 264 阅读 · 0 评论 -
求取字符串的最大子串
子串定义:将给定的字符串去除任意个字符后,例如acb的子串有a、b、c、ab、ac、cb、acb。子串大小:按照英文字母表的顺序进行排序,如acb的最大子串为cb。代码如下:-- 求取字符串的最大子串function GetMaxSubString(str) -- body local str = string.reverse(str) local ret_...原创 2019-10-21 15:44:36 · 3101 阅读 · 1 评论