算法
文章平均质量分 93
DEUSJIN
这个作者很懒,什么都没留下…
展开
-
乘积最大子数组
题目:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。思路:动态规划dp[i][1]为以nums[i]为结尾的最大乘积。本题与最大子序和不同点在于负负得正,若nums[i]>0最大值乘nums[i]变最大值最小值乘nums[i]变最小值若nums[i]<0则相反注意:若nums[i]>0,而最大值小于零,则最大值变为nums[i],其他同理。class Solution { public原创 2020-05-18 20:44:26 · 195 阅读 · 0 评论 -
包 你 理 解 的KMP算法
开头:之前已经看过好几遍 KMP 了,但每次一想就又忘了,可恶!!!所以今天我就写一个 炒 鸡 详 细 的 KMP 的思路过程,这我要再能忘真就白痴了。废话不多说,开始我的表演:...原创 2020-04-14 23:05:27 · 164 阅读 · 0 评论 -
Rotate matrix(翻转矩阵)
题目:Given an image represented by an N x N matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?来源:力扣(LeetCode)法一:新建一个矩阵,利用(i...原创 2020-04-07 12:14:11 · 735 阅读 · 0 评论 -
编辑距离 Edit Distance(difficult)(Dynamic Programming)
Problem:Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.You have the following 3 operations permitted on a word:Insert a characterDelete a...原创 2020-04-06 11:11:09 · 121 阅读 · 0 评论 -
单词的压缩编码(中等)字典树/前缀树/Trie数
题目:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进...原创 2020-03-30 13:49:08 · 252 阅读 · 0 评论 -
约瑟夫环
题目:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。来源:力扣(LeetCode)思路:么当我们删除一个数字,就将整个数组中的所有数字向前挪动m位,这样我们每次删除一个数字时...原创 2020-03-30 13:42:23 · 152 阅读 · 0 评论 -
最长上升子序列(动态规划+二分查找)巧妙的思路
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?来源:力扣(L...原创 2020-03-14 14:55:36 · 935 阅读 · 0 评论 -
Best Time to Buy and Sell Stock(买卖股票的最佳时机)
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。来源:力扣(LeetCode)思路:假设存在一个数列(不考虑空或一个元素的情况)a,b,c,d,e,f我们用一个i指针从下标1开始,每次i运动的过程中,我们计算的就是以下标i为结束(即在第i...原创 2020-03-09 12:24:36 · 228 阅读 · 0 评论 -
搜索二维矩阵 II
题目:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。法一:暴力法 O(nm)法二:每行或每列二分搜索O(nlogm)法三:我们从左下角出发,matrix[i][j] (i,j初始分别为行数-1,以及0),如果大于target则i–,否则j++直到找到target或将...原创 2020-02-12 19:56:19 · 124 阅读 · 0 评论 -
数组中的第K个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。法一:排序后输出。法二:优先队列(堆)。法三:利用快速排序的方法。在这里仅介绍法三,法一法二调用库函数即可。思路:首先,找第k个最大的元素,即是找第n-k+1个最小的元素。步骤一:我们利用快排的思想,每一次对一个元素进行归位,判断该元素最终位置p与n-...原创 2020-02-12 10:34:40 · 259 阅读 · 0 评论 -
特殊的二进制(困难)(递归)
题目:特殊的二进制序列是具有以下两个性质的二进制序列:0 的数量与 1 的数量相等。二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。给定一个特殊的二进制序列 S,以字符串形式表示。定义一个操作 为首先选择 S 的两个连续且非空的特殊的子串,然后将它们交换。(两个子串为连续的当且仅当第一个子串的最后一个字符恰好为第二个子串的第一个字符的前一个字符。)在任意次数的操作之后,交换...原创 2020-02-11 09:14:52 · 348 阅读 · 0 评论 -
原子的数目 递归(困难)
题目:给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。一个括号中的化学式和数...原创 2020-02-09 09:55:53 · 240 阅读 · 0 评论 -
所有可能的满二叉树(感悟递归)
满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0...原创 2020-02-06 19:07:56 · 239 阅读 · 0 评论 -
有效的井字游戏
用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中,玩家有可能将字符放置成游戏板所显示的状态时,才返回 true。该游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。以下是井字游戏的规则:玩家轮流将字符放入空位(" ")中。第一个玩家总是放字符 “X”,且第二个玩家总是放字符 “O”。“X” 和 “O” 只允许放置在...原创 2020-02-06 10:43:11 · 426 阅读 · 0 评论 -
第K个语法符号(递归)
题目:在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)例子:输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行: 01第三行...原创 2020-02-05 12:50:16 · 797 阅读 · 0 评论 -
划分为K个相同的子集(递归)
题目:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。注:题目搬运自LeetCode初始判断:由题目我们可知数组 nums 的总和为 s...原创 2020-02-05 09:29:10 · 534 阅读 · 0 评论 -
最大子序和 动态规划法(新手向)
题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。我们先定义一个函数F(N)表示nums数组以第N个元素为尾部的最大子序和,那么答案一定在F(1),F(2),F(3)…F(N)中,令F(1)为nums[0], 则有:F(N) = F(N-1) +nums[N];(当F(N-1)>0时)F(N) = nums[N];(当F(N-...原创 2020-01-30 09:58:19 · 194 阅读 · 0 评论 -
最长公共子数组(与子串同理)
最长公共子串首先注意子串和子序列的区别:一个字符串 s 被称作另一个字符串 S 的子串,表示 s 在 S 中出现了;一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。(定义引用LeetCode 1143)举例:1、s1: qwerdf, s2: qtwtetr (qwer为最长公共子序列)2、...原创 2020-01-29 08:41:34 · 931 阅读 · 0 评论