算法题
Deep Learning小舟
深度学习算法工程师
展开
-
算法题:MakeChange
MakeChange原创 2021-11-09 19:32:22 · 1936 阅读 · 0 评论 -
算法题:Rod Cutting
def rodOffcut(lengths,resut = []): resut.append(len(lengths)) # print(len(lengths)) minL = min(lengths) new_lengths = [] for i in lengths: i-=minL原创 2021-11-06 20:30:27 · 2134 阅读 · 0 评论 -
算法:动态规划—矩阵链相乘
问题描述给定n个矩阵{A1,A2,…,An},其中Ai与A i+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少解法1.穷举法:列举出所有可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘次数最少的计算次序。2.动态规划–自底向上进行计算用动态规划算法解此问题,可依据其递归式以自底向上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计原创 2021-02-05 10:43:52 · 19504 阅读 · 8 评论 -
算法题:计数器问题
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。原创 2021-11-02 23:50:24 · 7923 阅读 · 0 评论 -
算法:编辑距离(莱文斯坦距离)
两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以进行如下三种操作:插入、删除、替换输入:word1 = "horse", word2 = "ros"输出:3解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose原创 2020-12-20 11:36:52 · 5523 阅读 · 4 评论 -
算法:兔子数列问题
设有一对兔子;每月都生一对兔子(一雌一雄)新生的兔子两月后也每月生一对兔子;那么由一对兔子开始满一年后有多少对原创 2020-12-31 14:04:23 · 5896 阅读 · 3 评论 -
算法题:外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。可将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:```python1. 12. 113. 214. 12115. 111221```第一项是数字 1原创 2020-12-26 10:56:15 · 3818 阅读 · 2 评论 -
算法题:整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21原创 2020-12-25 09:54:25 · 4145 阅读 · 3 评论 -
算法题:验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: falseclass Solution: # @pysnooper.snoop() def isPalindrome(self, s: str) -> bool:原创 2020-12-24 11:44:26 · 3668 阅读 · 1 评论 -
算法题:实现 strStr()函数
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1说明:当 needle 是空字符串时,应当返回什么值呢?对于本题而言,当 needle 是空字符串时我们应当返回 0 。原创 2020-12-23 10:56:52 · 15409 阅读 · 19 评论 -
算法题:有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?能否调整你的解法来应对这种情况?# 代码```pythonclass Solution: # @pysnooper.snoop()原创 2020-12-22 10:36:24 · 8429 阅读 · 14 评论 -
算法题:字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例1:s = "leetcode"返回 0示例2:s = "loveleetcode"返回 2 提示:可以假定该字符串只包含小写字母。# 代码```pythonclass Solution: # @pysnooper.snoop() def firstUniqChar(self, s: str) -> int: Options = [] Dele原创 2020-12-21 11:53:39 · 4467 阅读 · 2 评论 -
算法:最大子序和 笔试题
定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。# 代码```pythonimport pysnooperclass Solution: @pysnooper.snoop()#pysnooper是装饰器,可以修改函数,作用是打印函数的参数 def maxSubArray(self , nu原创 2020-12-20 23:25:06 · 3947 阅读 · 1 评论 -
算法题:有序数组旋转之后,找出其最小值
给定一个非空整数有序数组,向左旋转K次,k未知,用最高效的方法找出旋转之后数组的最小值。这是我面试BAT其中某家广告算法工程师时的面试题,面试官给我题的时候,因为面试岗位是算法工程师,首先应该考虑的是时间复杂度和空间复杂度,且是有序数组,我首先想到的是二分查找。按照大小画出图,应该是两段线,第一个元素大于最后一个元素用二分查找,查找一次,扔掉一半数组,将数组长度变为原来的一半,时间复杂度为O(logn)那么什么时候就找到了呢?也就是第一个元素小于最后一个元素,此时这个小数组是有序的,也找到了原创 2020-12-19 11:22:53 · 7047 阅读 · 6 评论 -
算法题:查找只出现一次的数 两种方法 二分查找 时间复杂度为O(logn)
给定一个非空整数有序数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。这是我面试BAT其中某家广告算法工程师时的面试题,首先应该考虑的是时间复杂度和空间复杂度,且是有序数组,我首先想到的是二分查找,时间复杂度为O(logn)。方法一:二分查找,效率高,时间复杂度为O(logn)方法二:其他方法,时间复杂度太高,不太可取原创 2020-12-19 00:40:53 · 5564 阅读 · 6 评论 -
算法题:反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"原创 2020-12-18 11:26:43 · 5392 阅读 · 5 评论 -
斐波那契数列的两种解法:1.递归2.字典
斐波那契数列 算法 面试原创 2020-11-27 21:51:33 · 18031 阅读 · 11 评论 -
笔试题:数字字符串转换为区间表示 牛客网
数字字符串转换为区间表示试列python代码结果试列输入: [1,2,3,4,5,7,9,10,18,17,16]输出: [‘1-5’, 7, ‘9-10’, ‘16-18’]python代码def lll(num): num.sort() num.append(0) new_nums = [] flag = 'end' for i in range(len(num)-1): if flag == 'end': if原创 2020-11-29 15:16:00 · 5190 阅读 · 3 评论 -
笔试题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:递归的方法求解斐波那契数列、用概率与统计的数学方法解决,3.动态规划
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:一、递归的方法求解斐波那契数列有j个台阶的时候,可以一次跳1步,再跳完j-1个台阶,也可以一次跳两步,再跳j-2个台阶,故f(j)=f(j-1)+f(j-2),聪明的学习者可以发现,这一步和斐波那契数列特别像,没错!这就是一个斐波那契数列,用递归的方法来解决就可以了。求解斐波那契数列的两种方法在这篇博客中:https://blog.csdn.net/qq_36079986/article原创 2020-11-28 12:28:48 · 18908 阅读 · 8 评论 -
面试题:给定一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。leetcode32题 最长有效括号 地平线公司算法工程师面试题
给定一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”str = ')()())'str= '()(())'def fun(str): list_str=[] num = 0 for i in str: if i == "(": list_str.append(i) if i == ")" and len(list_原创 2020-11-27 22:30:07 · 6427 阅读 · 2 评论 -
算法题:两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果nums1的大小比nums2小很多,哪种方法更优?如果nums2的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?原创 2020-12-14 12:42:54 · 6313 阅读 · 3 评论 -
算法题:只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4代码class Solution: def singleNumber(self, nums: List[int]) -> int: k = 0 for i in nums:原创 2020-12-13 14:34:33 · 13258 阅读 · 13 评论 -
算法题:存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: truepython代码class Solution: def containsDuplicate(self, nums) -> boo原创 2020-12-12 12:57:54 · 5416 阅读 · 4 评论 -
算法题:旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]执行效率35 个测试用例执行用时: 144 ms内存消耗: 14.2 MB原创 2020-12-11 18:37:30 · 4538 阅读 · 2 评论 -
算法题:买卖股票的最优时机2
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票原创 2020-12-11 11:22:06 · 6086 阅读 · 2 评论 -
算法题:删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。原创 2020-12-10 19:36:35 · 5621 阅读 · 2 评论 -
算法题:最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"原创 2020-12-09 17:31:24 · 4995 阅读 · 2 评论 -
算法题:寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?原创 2020-12-10 09:53:28 · 4653 阅读 · 2 评论 -
算法题:两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]原创 2020-12-08 19:44:55 · 5050 阅读 · 2 评论 -
算法题:旋转图像
给定一个 n×n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:必须在原地旋转图像,需要直接修改输入的二维矩阵。不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3原创 2020-12-17 23:48:10 · 4292 阅读 · 2 评论 -
算法题:有效的数独
判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。说明:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。给定数独序列只包含数字1-9和字符'.'。给定数独永远是9x9形式的。原创 2020-12-16 00:05:38 · 5305 阅读 · 3 评论 -
算法题:移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。原创 2020-12-15 16:43:03 · 4483 阅读 · 1 评论 -
算法题:加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]原创 2020-12-15 10:10:39 · 5270 阅读 · 5 评论